如何在AngularJS嵌套控制器中改变顶层作用域变量

How to change top-level scope variables in AngularJS nested controllers?

本文关键字:改变 作用域 变量 控制器 AngularJS 嵌套      更新时间:2023-09-26

在一个页面上,我有以下结构:

  • layoutController(在js控制器中:$scope)currentProject = ")
    • {{currentProject。名称}}
    • projectListController -(在js控制器中,我填充$scope的值。当前项目与对象)

问题是,一旦我设置了新的值,{{currentProject。Name}}为空

缺失的是什么?

使用$parent.value访问父控制器作用域。

演示:

http://plnkr.co/edit/vj0kUoiXEqH9w5OPNhsu?p=preview

您应该尝试将该值默认为如下所示的空白对象

$scope.currentProject = ""

$scope.currentProject = {}

当你在父级$作用域中定义一个属性时,它将通过原型链被继承,如果你在子级$作用域中重新定义该属性,你将失去该引用。

所以继续的方法是在projectListController中,而不是将对象分配给currentProject,你应该复制属性到它。$parent.currentProject.

这是因为子控制器创建了父作用域的副本。

在你的嵌套控制器中,你应该注入$rootScope而不是$scope