AngularJS:无法通过指令更改父作用域

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' };

示例:http://jsfiddle.net/8Va9Q/

知道怎么做吗?谢谢

Mic*_*ael 5

您的问题是由于范围/原型继承.

将"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 中范围原型/原型继承的细微差别是什么?

这是完美的答案,你一定要读这个.