use*_*863 0 javascript angularjs angularjs-directive angularjs-scope angularjs-ng-repeat
我试图通过指令更改控制器范围,但它不会更改.
当我通过指令更改模型时,goas将自动更改$scope.modulesin MyCtrl:
link: function (scope) {
scope.module.title += ' changed';
scope.module = {
title: 'Redeclared'
};
},
Run Code Online (Sandbox Code Playgroud)
这段代码完美无缺
scope.module.title += ' changed';
但这不是: scope.module = { title: 'Redeclared' };
在$ http.get请求之后,我们有一个对象,{title: 'Redeclared'}这就是为什么我这样做scope.module = { title: 'Redeclared' };
知道怎么做吗?谢谢
您的问题是由于范围/原型继承.
将"module"变量设置为新引用时,新变量将仅在当前范围内已知.在父作用域上,'module'变量保持不变.
您可以看到最终结果,例如:
-> parent scope
-> module = { title: 'foo' }
-> child scope
-> module = { title: 'Redeclared' }
Run Code Online (Sandbox Code Playgroud)
相反,如果只设置'module'变量的title属性,那么将更新父作用域上的属性(在'module'变量上).
如果要覆盖变量,请使用angular.extend(它将覆盖您的对象属性):
angular.extend($scope.module, {
title: 'Redeclared'
});
Run Code Online (Sandbox Code Playgroud)
你的小提琴是最新的.
关于AngularJS在SO上的范围继承有一个非常好的答案:AngularJS 中范围原型/原型继承的细微差别是什么?
这是完美的答案,你一定要读这个.
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |