如何在同一控制器之间共享两次范围

时间:2014-12-16 15:02:54

标签: javascript html angularjs scope

我有一个控制器出现在页面上的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();

2 个答案:

答案 0 :(得分:3)

&#34;我希望能够使用$ scope并影响主要元素,因为它们使用相同的控制器&#34;这是一个错误的假设

来自角色的文档

  

当Controller附加到DOM时,Angular将实例化新的Controller对象

意味着你不能在2个控制器之间共享状态(比如java中相同类的2个实例),你可以做的是:

  1. 让父范围包装两个范围并使用其范围共享数据
  2. 使用共享服务
  3. 两个控制器之间的广播消息(我最不喜欢的)

答案 1 :(得分:2)

这就是控制器的工作原理,你无法真正做到这一点。

控制器之间的通信和数据共享是非常常见的主题,基本上你有2种方法:

1)使用服务:Reused ng-controller as singleton

2)使用$ broadcast和$ on:docs