2015-03-11 29 views
7

Parametrelere yönlendirmeyi denetleyiciye enjekte etmede sorun yaşıyorum. Çözüm değeri {name: 'Banner', slug: 'banner'} nesnesine ayarlıyorum, ancak bir hata alıyorum.Angularjs: Bağımlılık nasıl çözümleneceğine rotaProvider

App.js

var app = angular.module('CMS', ['fields', 'ngRoute']); 

app.controller('ModuleController', ['$http', 'properties', 
    function($http, properties) { 
    var module = this; 
    module.properties = properties; 

    if (module.properties.slug.length) { 
     $http.get(module.properties.slug + '.php').success(function(data) { 
     module.list = data; 
     }); 
    } 
    } 
]); 

app.controller('HomeController', function() {}); 

app.config(function($routeProvider) { 
    $routeProvider 
    // route for the banner page 
    .when('/banner1', { 
    templateUrl: 'banner1.php', 
    controller: 'ModuleController', 
    resolve: { 
     properties: function() { 
     return { name: 'Banner', slug: 'banner' }; 
     } 
    } 
    }) 
    .when('/home', { 
    templateUrl: 'home.php', 
    controller: 'HomeController' 
    }) 
    .otherwise({ 
    redirectTo: '/home' 
    }); 
}); 

hatası:

Error: [$injector:unpr] http://errors.angularjs.org/1.3.14/$injector/unpr?p0=propertiesProvider%20%3C-%20properties%20%3C-%20ModuleController 
    at Error (native) 
    at http://modelo2.desenvolvimento.com/adm/js/angular/angular.min.js:6:417 
    at http://modelo2.desenvolvimento.com/adm/js/angular/angular.min.js:38:7 
    at Object.d [as get] (http://modelo2.desenvolvimento.com/adm/js/angular/angular.min.js:36:13) 
    at http://modelo2.desenvolvimento.com/adm/js/angular/angular.min.js:38:81 
    at d (http://modelo2.desenvolvimento.com/adm/js/angular/angular.min.js:36:13) 
    at Object.e [as invoke] (http://modelo2.desenvolvimento.com/adm/js/angular/angular.min.js:36:283) 
    at $get.w.instance (http://modelo2.desenvolvimento.com/adm/js/angular/angular.min.js:75:451) 
    at http://modelo2.desenvolvimento.com/adm/js/angular/angular.min.js:58:476 
    at s (http://modelo2.desenvolvimento.com/adm/js/angular/angular.min.js:7:408) <div ng-view="" class="ng-scope"> 
+0

biliyor muydunuz sizi o Angular'ın indirgenmemiş sürümünü kullanmak, daha açıklayıcı hata mesajları alıyorsunuz? Bir dahaki sefere deneyin –

+0

Tahmin ediyorum çünkü 'ng-controller = "ModuleController" '/ banner1.php'de kullanıyorsunuz. –

+0

Banner1.php'deki ng-denetleyicisiydi. Teşekkürler @NewDev! –

cevap

9

ngRoute kimlik ya da bu gibi uygulamanın kesişen kaygıları için yararlıdır kontrolör, karar değişkenlerin enjeksiyon destekler uygulamanın yapılandırması.

dezavantajı denetleyici sadece ya sen ($controller birlikte) elle kumanda örneğini, yani enjekte edilecek mevcut bu parametrelerin, ya kararlılıkla ngRoute ile neredeyse hiç söz ile başlatılamaz olmasıdır. Böyle bir denetleyici ile yapamadığınız şey, ng-controller ile veya enjekte edilen parametrelerin bulunmadığı başka bir konumla başlatır.

Bu hata, denetleyiciyi rota üzerinde tanımlamanıza ek olarak, yolun şablonunda ng-controller olarak tanımlanmış denetleyiciye sahip olduğunuzu gösterir. Denetleyicinin bu ikinci örneği, başarısız olan şeydir.

+0

değil Teşekkür ederim! Başka bir yerde bir açıklama bulamadım. –

+1

Çıldırıyordum, hata mesajı daha açıklayıcı olmalı – gjspaho

7

$ Rota hizmetini kullanarak denetleyicinizde çözümlenen verileri alabilirsiniz.

.when('/banner1', { 
    templateUrl: 'banner1.php', 
    controller: 'ModuleController', 
    resolve: { 
     properties: function() { 
     return { name: 'Banner', slug: 'banner' }; 
     } 
    } 
    }) 

ve denetleyicisi:

o gidiş demo burada örnekte bu yüzden http://plnkr.co/edit/2oID3G0QStTOGEPPLQ3h?p=preview

bakınız aşağıda benziyor

app.controller('ModuleController', ['$http', '$route', 
    function($http, $route) { 
    var module = this; 

    //get resolved properties 
    module.properties = $route.current.locals.properties; 

    if (module.properties.slug.length) { 
     $http.get(module.properties.slug + '.php').success(function(data) { 
     module.list = data; 
     }); 
    } 
    } 
]); 
2
resolve : { 
    properties : ['projects', 'user', function (projects, user) { 
     return user.getData().then(function() { 
      return projects.getData(); 
     }); 
    }] 
} 
+0

Biraz açıklama ekleyin – HaveNoDisplayName

+3

Lütfen bu gönderiyi düşük kaliteli gönderilerde bulunduğunuz için yanıtınıza daha fazla ayrıntı verin. Sadece kodu ve 'bunu dene' yanıtı aranabilir hiçbir içerik sağlamadığından ve insanların neden bunu denemesi gerektiğinden cesaretlendirilmez. – Paritosh