我有父范围的指令,我还有另一个子范围指令。在模板中,我有几个父子范围。像这样。
ParentScope1
- ChildScope1
ParentScope2
- ChildScope2
如果我更改Parent中的值,我会将其广播给Child。我正在使用$rootScope.$broadcast
从父母广播。我正在使用$rootScope.$on
接受这个孩子的变化。
我的问题是:
现在,如果我更改ParentScope1中的值,它将广播到ChildScope1。然后我将更改ParentScope2中的值,它将广播到ChildScope2,但它也将广播到ChildScope1。
我想:更改ParentScope1中的值,它将广播到ChildScope1。更改ParentScope2中的值,它将广播到ChildScope2。我在线搜索了一段时间但没有找到解决方案。也许我没有使用正确的关键字进行搜索。请指教。谢谢。
答案 0 :(得分:0)
在你的指令集
的定义中scope : true
然后使用
$scope.$broadcast
$scope.$on
这应该可以正常工作
发布您的代码,以便我们更好地了解问题
答案 1 :(得分:0)
您正在寻找父母和子女指令之间的沟通,您可以使用以下方法,但两个指令将使用此紧密耦合 -
需要控制器 - 获取父节点指令控制器的同一节点的句柄。 需要:'^ parnetDireName'用于在父节点上查找控制器。没有^,它只会找到相同的节点。 '?'当控制器可能不可用时使用。''?^“,”?^^“,”^^“。链接功能的第四个参数用于获取控制器。它可以使用控制器道具/方法。你也可以访问多个控制器,因为需要将有数组 - 要求:['^ dir1','^ dir2']。链接功能将有cntrl数组,它可以通过数组访问元素在同一序列中
嵌套指令的预链接和后链接功能 -
--------------------------------- 另一种解耦方式 ---- -----------------
有三种方法可以设置指令范围和包含控制器范围之间的关系 -
- 包含控制器的共享范围指令。任何新的
item / modified item by directive将成为父范围的一部分。它是
默认或范围:false
- 继承范围的指令。通过包含控制器,指令添加的任何新项目都不可见。指令范围可以读取父范围内的所有数据。使用 scope:true 属性将其激活。孩子可以看到父数据并可以覆盖或创建新变量
- 隔离范围。两个范围都无法读取彼此的数据。需要对象映射来读取父数据。指令范围映射将具有对象名称,并且将从html传递相同的对象。有三种方法可以接收参数 -
- 完整对象数据 - > '='被使用
- 简单值,例如flag作为String-'@'。 '@sampleVar',其中sampleVar是html中变量的名称。
范围 {
cntrollerStrVarName:'@ htmlStrVarName'
}
- 功能参数 - '&'用于传递参数。可以使用({paramName:'value'})