【问题标题】:Multiple parent-child scope event trigger issue多个父子范围事件触发问题
【发布时间】:2018-02-14 02:51:46
【问题描述】:

我有一个针对父作用域的指令,我也有另一个针对子作用域的指令。在一个模板中,我有几个父子范围。像这样。

ParentScope1
 - ChildScope1
ParentScope2
 - ChildScope2

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

我的问题是:

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

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

【问题讨论】:

  • 为什么使用$rootScope 而不是$scopeCheck out this article 获取有关 angularjs 事件系统的更多信息。
  • @StanislavKvitash 我不知道,因为这是一个遗留代码,而编写它的人已经不在了。
  • @StanislavKvitash 我不认为如果我使用 $scope 会解决这个问题?

标签: javascript angularjs angularjs-rootscope


【解决方案1】:

在你对指令集的定义中

scope : true

然后使用

$scope.$broadcast
$scope.$on

这应该可以正常工作

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

【讨论】:

    【解决方案2】:

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

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

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

    • 默认链接功能是发布链接功能。
    • 使用关键字post明确定义
    • 如果父母和孩子都有帖子链接功能,则首先执行子帖子链接功能
    • 如果父子节点都具有预链接功能,则先执行父链接功能。
    • 控制器在链接函数之前执行

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 2011-01-22
      • 2016-09-30
      相关资源
      最近更新 更多