如何从子范围修改父范围中的控制器属性?

时间:2014-02-18 10:17:29

标签: javascript angularjs

我有一个父控制器来管理ng-view中的局部视图。 它有5个标签,每个标签都有一个表格。 每个表单都有自己的控制器。

我在父范围内维护一个变量。 我想在子控制器的一个范围内修改它,以便其他控制器也可以查看更改。

怎么可能?请问声明如何 $ scope.sharedProperty = 5

将父级中的那个作为5,或者在子范围内创建一个具有该值的新文件?

3 个答案:

答案 0 :(得分:2)

取决于您的位置和类型。如果你正在使用string,int,bool等并在子控制器中进行更改,那么包括父控件在内的其他控制器都不会看到它们,因为这会在子控制器上定义一个新属性。

如果您在父控制器上创建了一个对象,例如$ scope.sharedObject,那么您可以在子控件中的任何位置操作它,例如

$scope.sharedObject.prop1="newvalue";

并且所有其他人都会看到更改并使用$scope.$watch监视它。

在控制器之间共享数据的更好方法是使用服务。

另请阅读$ scope https://github.com/angular/angular.js/wiki/Understanding-Scopes

的原型继承

答案 1 :(得分:1)

与@Chandermani就服务达成一致。但您也可以像这样修改父范围:

$scope.$parent.sharedProperty = someValue;

答案 2 :(得分:1)

我建议使用服务来共享属性,这样你就可以避免创建依赖关系,只要想想你是否需要重用你的视图而不是作为一个直接的孩子,而是作为一个嵌套的孩子,使用服务角度来管理它你无后顾之忧。

例如,检查此answer