Введение зависимостей в модули config () - AngularJS
в настоящее время в приложение.js у меня есть следующие маршруты:
var gm = angular.module('gm', ['gm.services','gm.directives','gm.filters','gm.controllers','ngSanitize']);
gm.config(['$routeProvider', 'Path', function($routeProvider, Path) {
$routeProvider.when('/login', {
templateUrl: Path.view('application/authentication/login.html'),
controller: 'authController'
});
$routeProvider.when('/dashboard', {
templateUrl: Path.view('application/dashboard/index.html'),
controller: 'dashboardController'
});
$routeProvider.otherwise({
redirectTo: '/login'
});
}]);
Я пытаюсь в ject зависимости пути, как вы можете видеть. Хотя я получаю ошибку, говоря, что он не может найти этого поставщика. Я думаю, что это связано с тем, что провайзеры модуля конфигурации выполняются сначала, прежде чем что-либо еще. ниже приведено мое определение поставщика пути в службах.js
gm.factory("Path", function() {
return {
view: function(path) {
return 'app/views/' + path;
},
css: function(path) {
return 'app/views/' + path;
},
font: function(path) {
return 'app/views/' + path;
},
img: function(path) {
return 'app/views/' + path;
},
js: function(path) {
return 'app/views/' + path;
},
vendor: function(path) {
return 'app/views/' + path;
},
base: function(path) {
return '/' + path;
}
}
});
Как я могу ввести этот поставщик в модуль конфигурации?
4 ответа:
на
.config
вы можете использовать только поставщики (например,$routeProvider
). в.run
вы можете использовать только экземпляры служб (например,$route
). У вас есть фабрика, а не поставщика. смотрите этот фрагмент с тремя способами создания этого: Service, Factory и Provider Они также упоминают об этом в угловых документах https://docs.angularjs.org/guide/services
- угловое.config принимает только поставщиков
- каждое обслуживание, фабрика etc экземпляры провайдера
таким образом, чтобы внедрить службу в config, вам просто нужно позвонить поставщику службы, добавив "поставщик" к его имени.
angular.module('myApp') .service('FooService', function(){ //...etc }) .config(function(FooServiceProvider){ //...etc });
согласно поставщику angularjs документация
... если вы определяете заводской рецепт, пустой тип поставщика с помощью метода $get, установленного на вашем заводе функция автоматически создается под капотом.
так что если у вас есть завод (или услуги), например:
.factory('myConfig', function(){ return { hello: function(msg){ console.log('hello ' + msg) } } })
сначала вам нужно вызвать свою фабрику с помощью метода $get перед доступом к возвращаемому объекту:
.config(function(myConfigProvider){ myConfigProvider .$get() .hello('world'); });
вы должны использовать константу для этого, потому что это единственное, что вы можете ввести в фазе конфигурации, кроме поставщиков.
angular.module("yourModule").constant("paths", { base: function(){ ... } });
этой обсуждение помог мне, когда я пытался выяснить то же самое, в принципе
$routeProvider.when('/', { templateUrl:'views/main.html', controller:'MainController', resolve: { recentPosts: ['$q', 'backendService', function($q, backendService){ var deferred = $q.defer(); backendService.getRecentPosts().then( function(data) { var result = data.result; deferred.resolve(result); }, function(error) { deferred.reject(error); } ); return deferred.promise; }] } })