将ng开关插入ng repeat内部时的角度误差



ng重复的内部时,是否可以嵌套ng开关?

<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-reeat来帮助ne减少上面多余的HTML模板代码(ng切换时)。

不,你不能嵌套它们。ng开关向ng控制器$scope上的$$watches数组添加一个条目。ng repeat为每个迭代创建一个新的子作用域。当遇到ng开关时,(我猜在这里)它在当前的$作用域(现在是ng重复子作用域)中找不到任何ng开关信息,所以它失败了。

更新:我对此进行了更多的研究。这个错误发生在1.0.3中,但不是1.0.4(但它也不适用于1.0.4)。实际情况是,当作用域是控制器作用域的子作用域时,ng切换,而不是ng重复迭代子作用域。因此,当发出指令时,route对ng开关不可见。这里有一个使用1.0.4的fiddle——您可以单击一些链接来查看控制器、ng重复和ng切换默认作用域。检查ng开关的默认作用域,可以看到它的$parent是控制器的作用域,而不是ng重复作用域。

我认为ng开关打开后应该跟着ng开关。在您的情况下,您有

介于两者之间的CCD_ 2。

你展示的逻辑不需要ng开关,或者我可能遗漏了什么。

最新更新