指令的 2 向绑定不起作用

2-way binding for directive not working

我有一个自定义的 Angular 指令,它有一个独立的作用域,其值基映射为双向绑定 基===

我从父作用域将 base 传递给指令

并且在指令控制器中我正在修改这个基值。 base 不仅仅是一个对象,而是一个 json 结构,其内部有数组。我横向到 base 内的几个字段,然后更改这些字段值。例如,一个字段从 0 更改为 1。

现在,在父控制器中的另一个方法中,我从原始 JSON 中选择了这个基数,从那里它被传递到指令。我希望指令中更改的值反映在原始 JSON 对象中。

不幸的是,这没有发生。我想 2-way 绑定前缀应该可以实现。 不好意思,由于指令模板太大,暂时没有上传。以后有可能我会尝试上传微缩版的

与此同时,我是否哪里出错了,有没有具体需要做的事情。?

一个有效的 fiddle 说明这可能会有所帮助。我用谷歌搜索并找到了名为 $broadcast 和 $emit 的东西。我不确定在这种情况下如何使用它们,而且我以前从未使用过它们。

期待小伙伴们的帮助..

编辑:

return {
            scope: {
                parent: '='
                item: '=',

            },
controller: 'ctrlname',
templateUrl:'tplname',
  link: function (scope, element, attr) {
}

在 html 中类似于:

<li ng-repeat= l in originalJSON>
  -----------something here------
   <li ng-repeat= base in l>
   ---------something here-------
       <li ng-repeat="x in base.y">
<div layout="row" layout-wrap directive-name  parent="base"  item="item" ></div>
</li>
</li>
</li>

抱歉是“=”

再补充一个重要的信息。在父控制器中,我试图访问 originalJSON 并在其中的基本字段中查找修改的字段。

您不能使用 services/factories 共享基础对象吗?父作用域也是一个指令吗?

@ 不是双向绑定,对于双向绑定,您需要使用 =

scope: {
     "twoway": "=" // two way binding
  },

您遇到的问题是多个指令将两种方式绑定到同一个对象。

这一行出现了几次(等于base中的项目数):

<div layout="row" layout-wrap directive-name  parent="base"  item="item" ></div>

所以你在父类和基类之间有几个双向绑定。这些都位于一个 for 循环中,它将监视 base 是否有任何更改并在必要时更新循环。我想这很容易导致您的代码出现问题。

也许,您可以改为绑定到 x?

编辑澄清(根据评论要求): 您有正在更新的 'base' 对象,这是在多个指令上使用两种方式绑定。因此,你有: 基础对象 'a' 与指令 1 中的对象 'b' 保持同步。 基础对象 'a' 与指令 2 中的对象 'c' 保持同步。 基础对象 'a' 与指令 3 中的对象 'd' 保持同步。

等等在你的for循环中。然后,当你的指令被处理时,你有一些逻辑来更新 b、c 和 d——这反过来你希望更新 a。这些事件可能会同时触发。每次它们触发时,您的 for 循环(循环遍历 a 中的元素)会识别出 'a' 已更改并显示 'lets calculate the results of this for loop again'。然后将再次创建每个指令 - 可能会触发更多逻辑来更改 a. 您的问题中没有足够的信息来说明这是问题所在,但希望您可以从我的描述中看出竞争条件可能是这里的问题。相反,在你的 for 循环中绑定到 x(如果需要的话,可以通过一种方式绑定到基础对象)应该是一种更安全的实现你想要的方法。