多个父子范围事件触发器问题

时间:2017-09-05 18:28:07

标签: javascript angularjs angularjs-rootscope

我有父范围的指令,我还有另一个子范围指令。在模板中,我有几个父子范围。像这样。

ParentScope1
 - ChildScope1
ParentScope2
 - ChildScope2

如果我更改Parent中的值,我会将其广播给Child。我正在使用$rootScope.$broadcast从父母广播。我正在使用$rootScope.$on接受这个孩子的变化。

我的问题是:

现在,如果我更改ParentScope1中的值,它将广播到ChildScope1。然后我将更改ParentScope2中的值,它将广播到ChildScope2,但它也将广播到ChildScope1。

我想:更改ParentScope1中的值,它将广播到ChildScope1。更改ParentScope2中的值,它将广播到ChildScope2。我在线搜索了一段时间但没有找到解决方案。也许我没有使用正确的关键字进行搜索。请指教。谢谢。

2 个答案:

答案 0 :(得分:0)

在你的指令集

的定义中
scope : true

然后使用

$scope.$broadcast
$scope.$on

这应该可以正常工作

发布您的代码,以便我们更好地了解问题

答案 1 :(得分:0)

您正在寻找父母和子女指令之间的沟通,您可以使用以下方法,但两个指令将使用此紧密耦合 -

需要控制器 - 获取父节点指令控制器的同一节点的句柄。 需要:'^ parnetDireName'用于在父节点上查找控制器。没有^,它只会找到相同的节点。 '?'当控制器可能不可用时使用。''?^“,”?^^“,”^^“。链接功能的第四个参数用于获取控制器。它可以使用控制器道具/方法。你也可以访问多个控制器,因为需要将有数组 - 要求:['^ dir1','^ dir2']。链接功能将有cntrl数组,它可以通过数组访问元素在同一序列中

嵌套指令的预链接和后链接功能 -

  • 默认链接功能是后期链接功能。
  • 使用关键字post明确定义
  • 如果父级和子级都具有帖子链接功能
  • ,则首先执行子帖子链接功能
  • 如果父和子都有预链接功能,则首先执行父链接功能。
  • 控制器在链接功能
  • 之前执行

--------------------------------- 另一种解耦方式 ---- ----------------- 有三种方法可以设置指令范围和包含控制器范围之间的关系 -   - 包含控制器的共享范围指令。任何新的     item / modified item by directive将成为父范围的一部分。它是     默认或范围:false   - 继承范围的指令。通过包含控制器,指令添加的任何新项目都不可见。指令范围可以读取父范围内的所有数据。使用 scope:true 属性将其激活。孩子可以看到父数据并可以覆盖或创建新变量   - 隔离范围。两个范围都无法读取彼此的数据。需要对象映射来读取父数据。指令范围映射将具有对象名称,并且将从html传递相同的对象。有三种方法可以接收参数 -   - 完整对象数据 - > '='被使用   - 简单值,例如flag作为String-'@'。 '@sampleVar',其中sampleVar是html中变量的名称。             范围 {             cntrollerStrVarName:'@ htmlStrVarName'             }
  - 功能参数 - '&'用于传递参数。可以使用({paramName:'value'})

覆盖方法参数