我有一个指令(使用隔离范围),该指令利用另一个指令来更改标志,因此必须将其放入容器对象中。现在,我还希望能够从外部设置该标志。让我为您“画”这个:
outerScope (outerFlag1 = true, outerFlag2 = true)
directiveScope (container.flag1 = false, container.flag2 = false)
subdirectiveScope (container.flag1 = false)
subdirectiveScope (container.flag2 = false)
由于容器是原型继承的,所以指令Scope和subdirectiveScope中的标志变量始终相同。现在,我希望能够从外部进行设置,以将externalFlagX与container.flagX同步。
使用隔离的范围定义,我可以像这样映射属性:
scope: {
outerFlag1: '=flag1'
outerFlag2: '=flag2'
}
但是,我需要但不允许的是
scope: {
outerFlag1: '=container.flag1'
outerFlag2: '=container.flag2'
}
我怎样才能做到这一点?
我根据Mikko提供的插件添加了一个插件(非常感谢):http ://plnkr.co/edit/hT6Zip
我的问题的答案有两个部分,从我的问题中并不完全显而易见,为此深表歉意。
只是不要使用容器对象。(请参阅我所问的问题)
尽管这在插件中起作用,但在我的代码中仍然不起作用。所以我把它剥离下来,直到它起作用。第二个问题是,我将子指令与ng-if一起使用。查看经过修改的插件,其中一种用法具有ng-if,如下所示:
<sub-directive ng-if="condition" flag="flag2"> </subdirective>
不幸的是(在这种情况下),ng-if创建一个子作用域,以便如果在子伪指令中修改了该标志,它将在该子作用域中设置一个自己的属性。与往常一样,这在父范围(原型继承)中不可用。首先单击父复选框,它会按预期工作,单击子复选框将其中断。
因此,解决方案是改用ng-show,它不会创建另一个作用域。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句