JavaScript闭包与否(使用AngularJS指令和D3JS时)
javascript closure or not (while using angularjs directive and d3js)
受到这个带有 2 路绑定的 angular 指令示例的启发,我做了一个简单的指令,一旦点击就会实时更改父范围代码笔上的值。
.directive("haha", function() {
return {
scope: {
v: '='
},
template: `<div ng-click="myfun()">click me now</div>`,
link: function(scope, element) {
scope.myfun = function() {
scope.v = "clicked";
}
}
}
});
现在我在"link"中添加一个用 d3 绘制的 svg 圆圈,并尝试添加一个类似的事件处理程序d3.on
d3.select(element[0]).append("svg").attr({width:300,height:300})
.append("circle").attr({cx:100,cy:100,r:20})
.on("click",function(){scope.v="clicked inside d3"; alert(scope.v)});
当我点击圆圈时,html页面上的{{value}}
不会改变。 代码笔直播
难道不正确吗,作为 javascript 闭包规则,在 on("click", function() ...
中,scope.v
应该仍然与scope
相同link: function(scope...
你需要添加 scope.$apply,因为你正在"角度世界"之外更新你的范围,并且您希望 angular 运行一个摘要循环。
d3.select(element[0]).append("svg").attr({width:300,height:300})
.append("circle").attr({cx:100,cy:100,r:20})
.on("click",function(){scope.$apply(function(){scope.v="clicked inside d3";})});
代码笔。
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 参数变量出现ngTable指令问题
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- 使用每次都不同的transclude重复指令
- 打开一个模态并将其链接到AngularJS中的指令
- 从html创建一个指令,该指令按类名应用函数
- 将JSON对象传递给angular指令
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- JavaScript指令不能像我想象的那样工作
- AngularJs指令,该指令创建内部有数据对象的新指令
- AngularJS指令只识别双向绑定类型
- 从控制器继承了隔离的作用域以生成可重用的指令
- AngularJS指令出错-无法读取属性'编译'的未定义
- d3js文本传输-示例代码不起作用
- Angular指令在alertify setContent内容中不起作用
- 对父作用域的指令更新延迟了一步
- 指令的模板必须只有一个根元素:With restrict E&替换true
- AngularJS指令单元测试中未定义的函数
- JavaScript闭包与否(使用AngularJS指令和D3JS时)
- d3js/AngularJS-在angular指令中使用d3js