2013-02-07 11 views
12

MyCtrl1.resolve nesnesinin alanlarını enjekte etmek için MyCtrl1 numaralı telefona uygun bağımlılık enjeksiyonunu kullanmak istiyorum. Hiç şans olmadan @MyCtrl1.resolve vb. Enjekte etmeye çalışmak için birçok farklı kombinasyon denedim.Çözünürlükte angularjs bağımlılık enjeksiyonu

@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']) 

cevap

22

Çözüm, bir denetleyicinin değil, bir yolun bir özelliğidir. Denetleyiciler, bir yol düzeyinde tanımlanan bağımlılıklar ile enjekte edilecek, bir denetleyicideki özellikleri çözümlemeye gerek yoktur. (JavaScript şekilde değiştirilmiş) sizin örneklerden birini alarak

, yani her zaman olduğu gibi, kendi denetleyici tanımlarsınız:

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

ve daha sonra bir rotada gidermek özelliği:

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: '/'}); 
}]); 

ise dizi stili ek açıklamaları kullanmanız gereken yönlendirme çözümünü kullanarak kodu küçültmek istersiniz - bunu yukarıdaki örnekte ekledim.

+0

Cevabınız için teşekkür ederiz. Ancak, korkarım ki bu, 'batman' ve 'unvanı' MyCtrl1'e enjekte etmeme nasıl yardımcı olduğunu görmüyorum. MyCtrl1. $ Inject = ['$ kapsam', '$ http', 'batman', 'title'] 'işe yaramaz – jakecar

+0

@jakecar, global olarak tanımlanmış kontrolörler için çalışmalıdır. Bir modülde kayıtlı olan denetleyiciler için (önerilir) dizi stili ek açıklamaları kullanmanız gerekir. Çalıştığınız problemler varsa bana bildirin, bir yığın hazırlayın. –

+3

Sanırım, "batman" ve "title" için –