[英]javascript closure or not (while using angularjs directive and d3js)
受此示例具有2向绑定的angular指令的启发,我做了一个简单的指令,一旦单击它将更改父作用域codepen live上的值。
.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";
}
}
}
});
现在,我在“链接”中添加了一个用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}}
不变。 Codepen Live
按照javascript封闭规则,在on("click", function() ...
, scope.v
仍应与link: function(scope...
scope
相同link: function(scope...
您需要添加scope。$ apply,因为您要在“ angular world”外部更新范围,并且希望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";})});
Codepen 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.