将ng-switch嵌入ng-repeat内时的角度误差

时间:2013-02-08 03:47:37

标签: javascript angularjs angularjs-ng-repeat

是否可以在 ng-repeat 的内部嵌套 ng-switch-

<div ng-controller="UserController">
                            <div ng-switch on="renderPath">
                                <div ng-repeat="route in routes">
                                    <div ng-switch-when="route.path">
                                        <div ng-include src="route.url"></div>
                                    </div>
                                </div>
                            </div>
                        </div>

运行时出现以下异常:

    Error: Argument '?' is required
pa@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js:16 ...

<!-- ngSwitchWhen: route.path -->

谢谢!

修改

我想要完成的是以下

<div ng-switch on="renderPath">
                                    <div ng-switch-when="path1">
                                        <div ng-include src="url1"></div>
                                    </div>
                                    <div ng-switch-when="path2">
                                        <div ng-include src="url2"></div>
                                    </div>
                                    <div ng-switch-when="path3">
                                        <div ng-include src="url3"></div>
                                    </div>
                                </div>
                            </div>

所以我想知道我是否可以使用 ng-repeat 来帮助减少上面的冗余HTML模板代码( ng-switch-when )。

2 个答案:

答案 0 :(得分:3)

不,你不能嵌套它们。 ng-switch在ng-controller $ scope上为$$ watchers数组添加一个条目。 ng-repeat为每次迭代创建一个新的子范围。当遇到ng-switch-when时,(我猜这里)它在当前的$ scope(现在是ng-repeat子范围)中找不到任何ng-switch信息,所以它失败了。

更新:我对此进行了更多研究。错误发生在1.0.3,但不是1.0.4(但它也不适用于1.0.4)。实际上是ng-switch-when范围是控制器范围的子范围,而不是ng-repeat迭代子范围。因此,ng-switch-when指令不可见route。这是使用1.0.4的a fiddle - 您可以单击某些链接以查看控制器,ng-repeat和ng-switch-default范围。检查ng-switch-default范围,您可以看到它的$ parent是控制器的范围,而不是ng-repeat范围。

答案 1 :(得分:1)

我认为ng-switch on应该跟随ng-switch-when。在你的情况下,你有一个

中间有

<div ng-repeat="route in routes">

您显示的逻辑不需要ng-switch或者我可能缺少某些东西。