【发布时间】:2016-03-23 22:59:02
【问题描述】:
我正在使用从控制器到指令的角度单向绑定。当我更新指令中的值时,它不应该更新控制器中的值。但它作为双向绑定工作。谁能找到我的错误。
angular.module("myApp",[])
.directive("myDirective",['$timeout', function ($timeout) {
return {
scope: {myValue: "&myAttribute"},
template: '<input type="text" ng-model="myValue().name">',
link: function (scope, iElm, iAttrs) {
var x = scope.myValue();
console.log(x);
$timeout(function(){
x.name= "directive";
},4000);
}
};
}]).controller("myController", function ($scope, $timeout) {
$scope.someObject = {name: "test"};
$timeout(function(){
$scope.someObject.name= "controller";
},2000);
});
【问题讨论】:
-
我认为 & 将创建一个函数,该函数返回父作用域中 someObject 的值,docs.angularjs.org/api/ng/service/$compile,所以这不是单向的。
-
是的,& 返回一个 getter 函数。所以应该是单向的
-
它获得了一个对象的引用,所以指令和父作用域都有相同的引用,对对象属性的任何更改都会自然地出现在这两个地方
-
有点离题,但如果您使用的是 Angular 1.5.x,您将可以使用
<绑定,这是单向的。
标签: javascript angularjs