【问题标题】:Angular Error when enbedding ng-switch inside of ng-repeat在 ng-repeat 中嵌入 ngswitch 时出现角度错误
【发布时间】:2013-02-21 17:50:57
【问题描述】:

是否可以在 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)。

【问题讨论】:

    标签: javascript angularjs angularjs-ng-repeat


    【解决方案1】:

    不,你不能嵌套它们。 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 迭代子范围。因此,route 对 ng-switch-when 指令不可见。这是使用 1.0.4 的a fiddle——您可以单击一些链接来查看控制器、ng-repeat 和 ng-switch-default 范围。查看 ng-switch-default 作用域,您可以看到它的 $parent 是控制器的作用域,而不是 ng-repeat 作用域。

    【讨论】:

    • 马克,但我认为范围是继承的。所以它不查找范围链?谢谢!
    【解决方案2】:

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

    &lt;div ng-repeat="route in routes"&gt;介于两者之间。

    您显示的逻辑不需要 ng-switch 或者我可能遗漏了一些东西。

    【讨论】:

    • 谢谢。我已经编辑了这个问题。希望它有点清楚。
    猜你喜欢
    • 2017-07-14
    • 2015-04-19
    • 2015-09-15
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多