使用 AngularJS。我有一个指令,我希望有两种方式的数据绑定。该指令将有一个名为“activate”的属性。最初,“activate”的值为“1”。
该指令的链接函数将检查“activate”是否等于“1”。如果是这样,它将“激活”更改为 0,但会做一些其他的事情。
稍后,如果我想让指令再次做一些事情,在控制器中,我将再次将“激活”更改为“1”。由于指令有手表,它会重复循环。
不幸的是,每次我这样做时,我都会得到“与指令'testDirective'一起使用的表达式'0'是不可分配的!” 或“不可赋值模型表达式:1(指令:testDirective)”。
这是HTML:
<body ng-app="app">
<test-directive activate="1"></test-directive>
</body>
这是JS:
var app = angular.module('app', []);
app.directive('testDirective', function() {
return {
restrict: 'E',
scope: {
activate : '='
},
link: function( scope, elem, attrs, controller ) {
var el = elem[0];
var updateContent = function() {
el.innerText = 'Activate=' + scope.activate;
};
updateContent();
attrs.$observe( 'activate', function() {
console.log('Activate=' + scope.activate);
if( scope.activate == '1') {
scope.activate = '0'
updateContent();
}
});
}
}
});
这是在 jsFiddle 上:http: //jsfiddle.net/justbn/mgSpY/3/
为什么我不能更改存储在指令属性中的值?我正在使用2路绑定。
文档说“如果父范围属性不存在,它将引发 NON_ASSIGNABLE_MODEL_EXPRESSION 异常。”
注意:更新内容正确显示“激活”的值。但是,“”中“activate”的值不会更新。
然而,这对我来说毫无意义,因为父范围属性确实存在。
有任何想法吗?