[英]angular js custom directive scope.$watch not working as expected
我已经将自定义指令绑定到svg
组的transform
属性:
app.directive('ngScale', function () {
return function (scope, element, attrs) {
scope.$watch(attrs.ngScale, function (value) {
element.attr('transform', "scale(" + value + ")");
}, true);
};
});
<g ng-scale="{{vm.scale}}">...</g>
vm.doStuff = function () {
...
vm.scale *= 1.1;
}
<g ng-scale="1.1" transform="scale(1)">...</g>
调用doStuff
更改比例值,并且我可以看到DOM中的ng-scale
属性发生了变化,但是实际的transform
属性仅在首次运行时填充,而从未再次更新。 为什么会这样呢?
为了使观察者能够正常工作,请在使用指令时不要使用插值(大括号)。
<g xd-scale="vm.scale">...</g>
angular.module('myApp').directive('xdScale', function () {
return function linkFn (scope, elem, attrs) {
scope.$watch(attrs.xdScale, function (value) {
console.log("Watch fired ", value);
elem.attr('transform', "scale(" + value + ")");
});
};
});
参数attrs.xdScale
是一个字符串。 当$watch
的第一个参数是字符串时,watch函数将作为AngularJS表达式求值。 双花括号在Angular表达式中不起作用。
另外,请不要使用ng-scale
作为指令的名称。 ng-
前缀保留用于AngularJS内置指令。
要查看该指令是否有效,请在JSFiddle上访问DEMO 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.