0

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

到目前为止,我的进步是在这个 plunker: http ://plnkr.co/edit/yeCiIOCQswYJHyTozQUZ

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

我还担心在这个阶段调用 $compile 似乎已经丢弃了项目列表,所以看起来我在吠叫错误的树。

如何让嵌入的内容在当前状态下重新评估?

更新

我想我叫错了树。Mathew 的回答让我朝着正确的方向开始,所以这是一个很大的帮助。

据我所知,尝试在指令中构造指令(ng-switch)是一个坏主意。在之前的 plunker 中,当编译发生时,模板被永久更改。这意味着如果我更改了不会更新的参数。这就是我首先闻起来很有趣的东西。

这是修改后的 plunker: http ://plnkr.co/edit/WUVgdXjwedxO4356321s

在这种情况下,对重新触发嵌入的 'which' 值有一个监视。该函数删除前一个条目(如果有)并添加新条目。还有一些额外的好处。

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

我希望这有助于其他人看到这个问题。

4

1 回答 1

0

您的代码有两个问题:

1)您的模板已被评估,因此您的 on 成为数字 1,而不是您想要的变量“which”:

template: '<div><div ng-switch on="which"></div></div>',

2)当你使用编译时,你需要像这样传递$scope:

$compile(sel)($scope);

这是为您更新的 plnkr:http ://plnkr.co/edit/Q6ViJBvkLwQRgUKYMfS9?p=preview

于 2013-06-17T01:31:03.023 回答