4

ng-switch-whenをng-repeatの内部にネストすることは可能ですか?

<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>

したがって、上記の冗長な HTML テンプレート コード ( ng-switch-when ) を削減するためにng-repeatを使用できるかどうか疑問に思っていました。

4

2 に答える 2

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反復子スコープではないということです。したがって、routeng-switch-whenディレクティブには表示されません。これが1.0.4を使用するフィドルです。いくつかのリンクをクリックすると、コントローラー、ng-repeat、およびng-switch-defaultスコープが表示されます。ng-switch-defaultスコープを調べると、その$ parentがコントローラーのスコープであり、ng-repeatスコープではないことがわかります。

于 2013-02-08T15:57:59.633 に答える
1

ng-switch on の後に ng-switch-when が続くと思います。あなたの場合、あなたは持っています

<div ng-repeat="route in routes">間に。

あなたが示したロジックは ng-switch を必要としないか、何か不足している可能性があります。

于 2013-02-08T07:27:42.193 に答える