我有一个看起来像这样的数组:
$rootScope.array = [{
"id":"a",
"title":"a",
"options":[
{
"optId":"abc",
"isInvalid":false
},
{
"optId":"efg",
"isInvalid":false
}
]
},
{
"id":"b",
"title":"b",
"options":[
{
"optId":"hij",
"isInvalid":false
},
{
"optId":"lmn",
"isInvalid":false
}
]
}];
在对' isInvalid
'内部的'属性进行任何更改时options
,我想触发一个函数,该函数将评估整个数组并将某些属性设置为' true
',另一些属性设置为' false
'。
我知道使用$ watch对象等效项可以完成这种事情,但是我不确定我怎么能只监视' isInvalid
'的变化而不允许我们说' optId
'的变化。
在更大的方案中,我的意图是通过一组业务规则来验证整个阵列。因此,如果isInvalid
第一个对象的“ ”属性更改为“ true
”,我想确保isInvalid
第二个对象的“ false
”设置为“ ”,依此类推。
所以,除了之外,还有其他更好的方法可以做到$watch
,因为我对Angular还是比较陌生,我有点迷茫!
如果您的结构不太大,那么精打细算就可以解决问题。
http://teropa.info/blog/2014/01/26/the-three-watch-depths-of-angularjs.html
如果您担心性能,并且取决于您的方案,则可以评估执行以下操作:
具有父/全局isInvalid标志,每当标志被标记为无效标志以及全局无效标志时,您只需监视全局无效标志,并且一旦标志无效遍历就可以找到无效元素。
我想到的其他选择可能是在阵列中的每个条目添加一个手表,但不确定是否会比Deepwatch解决方案具有更差的性能。
如果您不滥用深度监视,那么它可能是您的方案的一个很好的解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句