是否可以在 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 )。
答案 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或者我可能缺少某些东西。