在ng-repeat中嵌套ng-switch时出现Angular错误

4

ng-repeat中嵌套ng-switch-when是否可行?

<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个回答

3
不可以嵌套。ng-switch在ng-controller $scope的$$watchers数组中添加条目, ng-repeat为每个迭代创建一个新的子作用域。当遇到ng-switch-when时,(我猜测)它找不到当前$scope中的任何ng-switch信息(现在是ng-repeat子作用域),因此失败。
更新:我进一步调查了这个问题。错误发生在1.0.3版本中,但1.0.4版本没有出现(但它也无法正常运行于1.0.4版本)。实际上,ng-switch-when作用域是控制器作用域的子作用域,而不是ng-repeat的迭代子作用域。因此,route对ng-switch-when指令不可见。这里有一个a fiddle,使用了1.0.4版本,您可以单击一些链接来查看控制器、ng-repeat和ng-switch-default的作用域。检查ng-switch-default的作用域,可以看到它的$parent是控制器的作用域,而不是ng-repeat的作用域。

马克,但我认为作用域是继承的。所以它不会查找作用域链?谢谢! - badallen

1
我认为ng-switch on应该跟着ng-switch-when。在你的情况下,中间有一个
。你展示的逻辑不需要ng-switch,或者我漏掉了什么。

谢谢。我已经编辑了问题,希望现在更加清晰明了。 - badallen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接