我有一个控制器出现在页面上的2个位置。出于各种原因,情况必须如此。
例如,我的简化HTML结构是这样的:
<aside ng-if="aside.on" ng-controller="myController"></aside>
<div>Some other stuff</div>
<main ng-controller="myController">
<table ng-table="..."></table>
</main>
现在,当我在aside
中执行任何操作时,我希望能够使用$scope
并使其影响主要元素,因为它们使用相同的控制器。但我发现即使他们使用相同的控制器,他们也有不同的范围。
所以我想知道,如果这是因为ng-if
,或者两个位置的同一个控制器是否正常。而且,我如何在2个控制器之间共享数据。特别是,我使用ngTable
并需要将数据添加到main
中的表格,然后在我编辑aside
中的内容时刷新它。
如果我在aside
中执行操作时触发以下操作,则表示不会更新main
表。
var newRow = {
_id: "1234213434",
name: "Test",
email: "test@test.com",
accountType: "admin",
logins: 0,
created: new Date(),
lastLogin: null,
locked: false
};
$scope.userList.push(newRow);
$scope.tableParams.reload();
答案 0 :(得分:3)
&#34;我希望能够使用$ scope并影响主要元素,因为它们使用相同的控制器&#34;这是一个错误的假设
来自角色的文档
当Controller附加到DOM时,Angular将实例化新的Controller对象
意味着你不能在2个控制器之间共享状态(比如java中相同类的2个实例),你可以做的是:
答案 1 :(得分:2)
这就是控制器的工作原理,你无法真正做到这一点。
控制器之间的通信和数据共享是非常常见的主题,基本上你有2种方法:
1)使用服务:Reused ng-controller as singleton
2)使用$ broadcast和$ on:docs