我有一个自定义的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 并在其中的基本字段中查找已修改的字段。
答案 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(如果需要,可以单向绑定到基础对象)应该是实现所需内容的更安全的方法。