1

私はコードから始めます:

when('/admin', {
    templateUrl: 'partials/admin/layout.html',
    controller: AdminCtrl
})
when('/admin/products', {
    templateUrl: '????',
    controller: AdminProductsCtrl
})

テンプレート「ツリー」:

index.html ---> <div ng-view/>
---layout.html ---> <div ng-include=menu/> and <div ng-include=body/>
------menu.html 
------products.html 

実際に私はこれを行います:

function AdminCtrl($scope) {
     $scope.menu = 'partials/admin/menu.html';
}

function AdminProductsCtrl($scope) {
    $scope.menu = 'partials/admin/menu.html';
    $scope.body = 'partials/admin/products/index.html';
}

要点: '????' に何を入れたか、layout.html を入れると問題なく動作しますが、ng-include=body を単に「更新」するのが好きです。Angularjs に関する私の概念は間違っていると思います。

その他の問題は、AdminProductsCtrl が layout.html の「制御権を取得」したときに、AdminCtrl $scope が見つからないことです。これは、AdminProductsCtrl $scope (たとえば、$scope.menu) 内のすべての AdminCtrl $scope を繰り返すことを意味します。

どうもありがとう、そして「私の英語」でごめんなさい。

アップデート

考えた後...そして考えた...ルートが私のアプリには適用されないことを理解した後、すべての機能を1つのURL「site.com/#/admin」で管理します。menu.html は AdminMenuCtrl の管理であり、このコントローラーには「ng-include」ごとにモデルが含まれ、メニュー エントリごとに 1 つのメソッドが含まれています。ユーザーがメニュー エントリをクリックすると、$scope の Associate メソッドが $scope.includes.body を「新しい」html に置き換えます。部分的に ng-controller が含まれています。

これで問題なく動作します:D. そして最高なのは、$rootScope を使用する必要がないことです。

新しい問題はもう少し複雑で、ng-include にはタグ (つまり DIV) と ng-controller も必要です。それから私のデザインはこれに影響を受けます。コード言語:

設計:

<div>MENU-HTML</div>
<div>BODY-HTML</div>

テンプレート:

<div ng-include="menu"></div>
<div ng-include="body"></div>

パーシャルを取得した後:

<div ng-include="menu"><div ng-controller="MenuCtrl">MENU-HTML</div></div>
<div ng-include="body"><div ng-controller="ListProductsCtrl">BODY-HTML</div></div>

理想的なこと:

1 - ng-include は、DIV に「含める」のではなく、DIV を「置換」します。

2 - ng-controller DIV は DOM で何も置き換えられません。

angularで可能になりましたか?このアイデアは悪いアプローチですか?ng-controller ディレクティブではなく、$route によるポイント 2 が可能です。

4

1 に答える 1

1

あなたが設定する例は正しいと思いますが????layout.htmlルートに基づいて異なるビューを持つという考え方であるため、同じものを指すことlayout.htmlは理想的ではありません。

すべてのページに静的メニューを保持しようとしている場合は、メニューを追加してから、index.htmlルートごとに異なる templateUrl を選択し (つまり、 go to と go to ) 、/adminngIncludeを使用しません。partials/admin.html/admin/productspartials/products.html

私はAngularJSを初めて使用しますが、独自のビュー切り替えをロールしたい場合は、通常、 templateUrls へのルートで ngView を使用するか、 ngInclude (おそらくngSwitchで) を使用したいという印象を受けています。両方を使用するのが適切な場合もあると思いますが、初心者としては多少混乱します。常駐の専門家は、私が間違っている場合は修正してください!

2番目の問題については、複数のコントローラー間で同じモデルを共有するためのヒントについて、ここここに役立つ情報があるかもしれませんが、おそらくあなたの例では必要ありません.

別の方法として、layout.html でパーシャルへの文字列定数パスを使用し、次を使用$scope.menuしてコントローラー コード内の参照を削除します。

<div ng-include="'partials/admin/menu.html'"/>
于 2012-07-09T20:44:32.603 に答える