我有一个父控制器,我已经初始化了一个范围变量x = false。在它引用的html中,我正在检查其值以显示/隐藏元素。我也是根据ng-click更改其值。
控制器内的-
$ scope.x = false;
在其html中 -
<div ng-if="x" ng-click="x= true">
<my-directive x="x"></my-directive>
</div>
正如您所看到的,我在其中引用了一个指令,它将“x”变量继承到其范围中。
指令定义:
'use strict';
angular.module('myApp')
.directive('srcCommmandBar', ['myService', myDirective]);
function myDirective(myService){
return {
restrict : 'E',
scope : {x: "="},
replace: false,
transclude: false,
templateUrl: '<button ng-click="x = false"></button>',
link: function(scope, element, attrs){
}
};
}
该指令的模板只有一个按钮,当单击该按钮时,会将范围变量x的值更改为false。
我的问题是虽然它在子范围“x”中发生了变化,但它并没有改变父范围“x”。我的理解是,由于双向绑定,x的变化将被级联到父级。我错了吗?我怎样才能做到这一点?
答案 0 :(得分:0)
您不应将原始变量绑定到子范围 你应该将它包装在一个物体中 否则,当您更改子范围中的x值时,将丢失原始引用。
-- templateUrl: '<button ng-click="x = false"></button>',
++ templateUrl: '<button ng-click="x.value = false"></button>',
答案 1 :(得分:0)
根据文档,有一个$ parent变量,所以我认为你应该可以使它与$ parent.x一起使用。