我正在尝试创建一个新指令,使用ng-switch在几个孩子中进行选择。这个例子不过是在一个指令中创建一个ng-switch,但最终该指令将有更多的显示糖和一些自动函数,所以看起来创建一个指令是正确的解决方案。
到目前为止,我的进展是在这个吸收者: http://plnkr.co/edit/yeCiIOCQswYJHyTozQUZ
我正在做的$ compile似乎正在评估切换,并确定该值与任何不应该为true的when子句不匹配。你可以通过检查渲染的选择器中的元素来看到它。
我还担心在这个阶段调用$ compile似乎已经抛弃了项目列表,所以看起来我正在咆哮错误的树。
如何在当前状态下重新评估已转换的内容?
更新
我想我正在咆哮错误的树。 Mathew的回答让我开始朝着正确的方向前进,所以这是一个很大的帮助。
据我所知,尝试在指令中构造指令(ng-switch)是一个坏主意。在编译发生的前一个plunker中,模板被永久更改。这意味着如果我更改了哪个参数就不会更新。这首先对我来说很有趣。
这是一个修订过的plunker: http://plnkr.co/edit/WUVgdXjwedxO4356321s
在这种情况下,有一个关于“哪个”值的监视器会重新进行转换。该函数删除前一个条目(如果有的话)并添加新条目。还有一些额外的好处。
首先我删除了'item'指令。它没有理由存在,因为我只是在看课。其次,我使用$ animator进行列表操作。这意味着您可以为选择器添加ng-animate并获得动画效果。
我希望能帮助别人看这个问题。
答案 0 :(得分:0)
您的代码存在两个问题:
1)您的模板已被评估,因此您的开始变为数字1,而不是您想要的变量“哪个”:
template: '<div><div ng-switch on="which"></div></div>',
2)当你使用compile时,你需要像这样传入$ scope:
$compile(sel)($scope);
这是一个更新的plnkr:http://plnkr.co/edit/Q6ViJBvkLwQRgUKYMfS9?p=preview