12

MyCtrl1オブジェクトのフィールドを注入するために、適切な依存性注入を使用したいと思いMyCtrl1.resolveます。私は@MyCtrl1.resolve運が悪かったので、注射などを試みることの多くの異なる組み合わせを試みました。

@MyCtrl1 = ($scope, $http, batman, title) ->
  $scope.batman = batman.data
  $scope.title = title.data

@MyCtrl1.resolve = {
 batman: ($http) ->
   $http.get('batman.json')
 title: ($http) ->
   $http.get('title.json')
}
#@MyCtrl1.$inject = ['$scope', '$http'] -- commented out because not sure how to inject resolve fields

 angular
.module( 'app', [])
.config( ['$routeProvider', '$locationProvider', ($routeProvider, $locationProvider)->
  $locationProvider.html5Mode(true)

  $routeProvider.when('/', {templateUrl: 'index.html', controller: MyCtrl1, resolve: MyCtrl1.resolve})
  $routeProvider.otherwise({redirectTo: '/'})
])

angular.bootstrap(document,['app'])
4

1 に答える 1

22

Resolve はルートのプロパティであり、コントローラーではありません。コントローラーには、ルート レベルで定義された依存関係が挿入されます。コントローラーで解決プロパティを指定する必要はありません。

あなたの例 (JavaScript に変換されたもの) の 1 つを取り上げると、いつものようにコントローラーを定義します。つまり、次のようになります。

MyCtrl1 = function($scope, $http, batman, title) {
  $scope.batman = batman.data;
  $scope.title = title.data;
}

次に、ルートの解決プロパティ:

angular.module('app', []).config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
  $locationProvider.html5Mode(true)

  $routeProvider.when('/',{templateUrl: 'index.html', controller: MyCtrl1, resolve: {
    batman: ['$http', function($http) {
      return $http.get(..).then(function(response){
         return response.data;
      });
    }],
    title: ['$http', function($http) {
      return //as above
    }]
  }});
  $routeProvider.otherwise({redirectTo: '/'});
}]);

ルーティングの解決セクションを使用してコードを縮小したい場合は、配列スタイルの注釈を使用する必要があります。これは上記の例に含まれています。

于 2013-02-07T18:12:58.243 に答える