3

適切な答えが見つからない問題があります。

たとえば、APIから収集したデータがあります

管理者

ユーザー

ユーザー プロファイル

ユーザー統計

このために私は持っています

管理者Ctrl

ユーザーコントロール

ユーザープロファイルCtrl

userstatsCtrl

問題は、コントローラーでユーザープロファイルを表示したい場合、userprofileCtrl が admins/:admin_id/users/:user_id/profile のような URL からルートを取得し、管理者、ユーザー、プロファイルなどのすべてのデータを収集する必要がある場合です。すべてのコントローラーが、ユーザーに関する私のビューのすべての詳細を出力できるようにします。

何らかの方法でコントローラーをネストできますか? これは、コントローラーの多くの乾燥につながります。

また、エラー メッセージを出力するためのベスト プラクティスは何かと考えています。API にすべてのリクエストを送信する apiservice があります。どのように rootScope でメッセージをサービスに設定する必要がありますか?

4

4 に答える 4

0

1

私の意見では、コントローラーはスコープの状態を開始するためにのみ使用する必要があり、データの読み込みタスクは必要に応じて移動するangular.factoryか、angular.service依存する必要があります。利点は次のとおりです。

  1. サービス オブジェクトは、アプリケーションのライフ サイクルに存在します。常に同じオブジェクトを扱うので、別の URL やコントローラーにルーティングしてもデータを保持できます。
  2. あなたのデータはどこでも利用できます
  3. スコープの継承をいじることについて心配する必要はありません。

場合によってng-repeatは、html で使用したい場合は、次のようにするだけです。

app.run(function($rootScope) {
    $rootScope.yourDataService = yourDataService
}

したがって、あなたのng-repeat意志は次のようになります。

<li ng-repeat="item in yourDataService.items"></li>

2

サービス オブジェクトで $rootScope にアクセスできますが、私の最初の回答に従えば、特に気にする必要はありません。内部のサービス オブジェクトにエラー メッセージを添付するだけで、app.serviceとして利用できるようになります$rootScope.yourDataService.errorMessage

于 2013-08-14T14:13:46.933 に答える
0

angular-ui の ui-router ディレクティブを調べる必要があると思います。

ネストされたルーティング用に特別に設計されています。

https://github.com/angular-ui/ui-router

http://angular-ui.github.io/ui-router/sample/#/

于 2013-04-26T08:49:51.030 に答える
0

ビューでコントローラーをネストできるため、すべての子コントローラーが親のモデルを継承します。

「Controller Inheritance Example」のAngularドキュメントをご覧ください: http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller

コントローラー:

angular.module('App', [])
.controller('MainCtrl', ['$scope', function($scope){
    $scope.foo = 'foo';
}])
.controller('CtrlOne', ['$scope', function($scope){

}])
.controller('CtrlTwo', ['$scope', function($scope){
    $scope.foo = 'bar';
}]);

次に、ビューは次のようになります。

<div ng-app='App'>
    <div ng-controller='MainCtrl'>
        <div ng-controller='CtrlOne'>
            CtrlOne: {{foo}}
        </div>
        <div ng-controller='CtrlTwo'>
            CtrlTwo: {{foo}}
        </div>
    </div>
</div>

上記の例の jsFiddle: http://jsfiddle.net/guilhermenagatomo/pAHR8/

より複雑な方法は、サービスを使用してコントローラー間でデータを共有することです。

于 2013-05-08T05:12:49.837 に答える