指令不起作用的双向绑定

时间:2015-10-05 12:58:53

标签: angularjs directive

我有一个自定义的Angular指令,它有一个隔离的作用域,其值基被映射为双向绑定 基= “=”

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

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

现在,在父控制器中的另一个方法中,我从原始JSON中选择此基础,从它传递给指令。我希望指令中更改的值能够反映在原始JSON对象中。

不幸的是,这种情况并没有发生。我想双向绑定前缀应该可以实现。 很抱歉,由于指令模板太大,我目前没有上传它。如果可能的话,我会尝试稍后上传微缩版。

与此同时,我在某个地方出错了,是否有特别需要做的事情。?

说明这一点的工作小提琴可能有所帮助。我google了一下,发现了一个叫做$ 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 并在其中的基本字段中查找已修改的字段。

3 个答案:

答案 0 :(得分:1)

您无法使用服务/工厂共享基础对象。父范围也是指令吗?

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

此行多次出现(等于基数中的项目数):

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

所以你在parent和base之间有几个双向绑定。这些都是一个for循环,它将监视任何更改的基础并根据需要更新循环。我想这可能很容易导致代码中出现问题。

也许,你可以绑定到x?

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

你的for循环中的

等等。然后,当你的指令被处理时,你有一些逻辑来更新b,c和d - 反过来你希望更新a。这些事件可能都会同时发射。每次它们触发时,你的for循环(循环遍历a中的元素)会识别'a'已经改变并且说'让我们再次计算这个for循环的结果'。然后将再次创建每个指令 - 可能会触发一些更改逻辑的逻辑。 你的问题中没有足够的信息来说明这是问题所在,但希望你能从我的描述中看出竞争条件可能会成为问题。在for-loop中绑定到x(如果需要,可以单向绑定到基础对象)应该是实现所需内容的更安全的方法。