Angularjs 在指令内动态创建ng开关

Angularjs 在指令内动态创建ng开关,angularjs,Angularjs,我正在尝试创建一个新的指令,该指令使用ng开关在几个孩子之间进行选择。这个例子并不比在一个指令中创建一个ng开关更多,但最终该指令将有更多的显示糖和一些自动功能,因此创建一个指令似乎是正确的解决方案 到目前为止,我的进步在于: 我正在做的$compile似乎在评估开关,并确定该值与任何不应该为true的when子句都不匹配。通过检查渲染选择器中的元素可以看到这一点 我还担心,在这个阶段调用$compile似乎已经扔掉了项目列表,所以我好像找错了方向 如何在当前状态下重新评估转置的内容 更新 我

我正在尝试创建一个新的指令,该指令使用ng开关在几个孩子之间进行选择。这个例子并不比在一个指令中创建一个ng开关更多,但最终该指令将有更多的显示糖和一些自动功能,因此创建一个指令似乎是正确的解决方案

到目前为止,我的进步在于:

我正在做的$compile似乎在评估开关,并确定该值与任何不应该为true的when子句都不匹配。通过检查渲染选择器中的元素可以看到这一点

我还担心,在这个阶段调用$compile似乎已经扔掉了项目列表,所以我好像找错了方向

如何在当前状态下重新评估转置的内容

更新

我想我找错人了。马修的回答让我从正确的方向开始,所以这是一个很大的帮助

就我所知,试图在指令中构造一个指令(ng开关)是个坏主意。在上一次编译时,模板被永久更改。这意味着如果我更改了参数,它将不会更新。这就是我一开始觉得很好笑的地方

这是一个经过修改的plunker:

在本例中,在“which”值上有一个表,用于重新定义转换。该函数删除以前的条目(如果有)并添加新条目。还有一些额外的好处

首先,我删除了“item”指令。它没有存在的理由,因为我只是在看课堂。其次,我使用$animator进行列表操作。这意味着您可以将ng animate添加到拾取程序并获得动画效果


我希望这能帮助其他人了解这个问题。

您的代码有两个问题:

1) 您的模板有一个正在评估的变量,因此您的on变成了数字1,而不是您想要的变量“which”:


这里有一个更新的plnkr供您使用:

我已经将传入的which变量设置为常量,只是为了简化测试用例。我想确保范围绑定不是问题所在。您发现的真正问题是将$scope从$compile中去掉。这是我错过的关键一点。谢谢
template: '<div><div ng-switch on="which"></div></div>',
$compile(sel)($scope);