未知提供者:ServiceProvider <- Service <- Controller
Unknown provider: ServiceProvider <- Service <- Controller
几个小时以来我一直在思考这个问题,似乎找不到解决方案。
我有以下内容:
//controller.js
(function() {
'use strict';
angular
.module('seed-module')
.controller('SeedPageController', SeedPageController);
SeedPageController.$inject = ['companyListPrepService', 'logger'];
function SeedPageController(companyListPrepService) {
var vm = this;
vm.companies = companyListPrepService;
console.log(vm.companies.data);
}
angular
.module('seed-module')
.factory('companyListService', companyListService);
companyListService.$inject = ['$http', 'logger'];
function companyListService($http, logger) {
return {
getCompanies: getCompanies
};
function getCompanies() {
return $http.get('/companies.json')
.success(function (data) {
return data;
})
.error(function (error) {
logger.error('XHR Failed for .' + error);
});
}
}
对于我的路线:
//seed.config.js
(function() {
'use strict';
angular
.module('seed-module')
.config(moduleConfig);
/* @ngInject */
function moduleConfig($translatePartialLoaderProvider, $stateProvider, triMenuProvider) {
$translatePartialLoaderProvider.addPart('app/seed-module');
$stateProvider
.state('triangular.admin-default.seed-page', {
resolve: {
companyListPrepService : companyListPrepService
},
url: '/seed-module/seed-page',
templateUrl: 'app/seed-module/seed-page.tmpl.html',
// set the controller to load for this page
controller: 'SeedPageController',
controllerAs: 'vm'
});
}
function companyListPrepService(companyListService) {
return companyListService.getCompanies();
}
})();
我的console.log(vm.companies.data);给我 REST 端点末尾的对象,但是,我得到一个
Error: [$injector:unpr] Unknown provider: companyListPrepServiceProvider <- companyListPrepService <- SeedPageController.
我对 AngularJS 比较陌生,不知道 companyListPrepServiceProvider 的来源。我什至不知道在哪里调试...有什么想法吗?
我猜您是在缩小代码,因此您缺少 companyListPrepService
函数的 DI 注释。尝试添加
companyListPrepService.$inject = ['companyListService'];
至seed.config.js
。
或者,尝试只使用数组注释函数
resolve: {
companyListPrepService: ['companyListService', function(companyListService) {
return companyListService.getCompanies().then(function(response) {
// as mentioned in comments, stop using "success"
return response.data;
});
}]
}
您的代码按原样运行。有 a working example,其部分按原样。 (确实,混合使用严格的符号并不好,我们应该到处使用明确的 $inject = [...]
- 但这里不是问题)
那么,可能是什么问题?我会说,控制器 SeedPageController
在其他地方使用,在其他一些状态下,NOT 包含解析语句:
resolve: {
//companyListPrepService : companyListPrepService
},
上面有这样的broken example错误信息
Error: [$injector:unpr] Unknown provider: companyListPrepServiceProvider <- companyListPrepService <- SeedPageController
几个小时以来我一直在思考这个问题,似乎找不到解决方案。
我有以下内容:
//controller.js
(function() {
'use strict';
angular
.module('seed-module')
.controller('SeedPageController', SeedPageController);
SeedPageController.$inject = ['companyListPrepService', 'logger'];
function SeedPageController(companyListPrepService) {
var vm = this;
vm.companies = companyListPrepService;
console.log(vm.companies.data);
}
angular
.module('seed-module')
.factory('companyListService', companyListService);
companyListService.$inject = ['$http', 'logger'];
function companyListService($http, logger) {
return {
getCompanies: getCompanies
};
function getCompanies() {
return $http.get('/companies.json')
.success(function (data) {
return data;
})
.error(function (error) {
logger.error('XHR Failed for .' + error);
});
}
}
对于我的路线:
//seed.config.js
(function() {
'use strict';
angular
.module('seed-module')
.config(moduleConfig);
/* @ngInject */
function moduleConfig($translatePartialLoaderProvider, $stateProvider, triMenuProvider) {
$translatePartialLoaderProvider.addPart('app/seed-module');
$stateProvider
.state('triangular.admin-default.seed-page', {
resolve: {
companyListPrepService : companyListPrepService
},
url: '/seed-module/seed-page',
templateUrl: 'app/seed-module/seed-page.tmpl.html',
// set the controller to load for this page
controller: 'SeedPageController',
controllerAs: 'vm'
});
}
function companyListPrepService(companyListService) {
return companyListService.getCompanies();
}
})();
我的console.log(vm.companies.data);给我 REST 端点末尾的对象,但是,我得到一个
Error: [$injector:unpr] Unknown provider: companyListPrepServiceProvider <- companyListPrepService <- SeedPageController.
我对 AngularJS 比较陌生,不知道 companyListPrepServiceProvider 的来源。我什至不知道在哪里调试...有什么想法吗?
我猜您是在缩小代码,因此您缺少 companyListPrepService
函数的 DI 注释。尝试添加
companyListPrepService.$inject = ['companyListService'];
至seed.config.js
。
或者,尝试只使用数组注释函数
resolve: {
companyListPrepService: ['companyListService', function(companyListService) {
return companyListService.getCompanies().then(function(response) {
// as mentioned in comments, stop using "success"
return response.data;
});
}]
}
您的代码按原样运行。有 a working example,其部分按原样。 (确实,混合使用严格的符号并不好,我们应该到处使用明确的 $inject = [...]
- 但这里不是问题)
那么,可能是什么问题?我会说,控制器 SeedPageController
在其他地方使用,在其他一些状态下,NOT 包含解析语句:
resolve: {
//companyListPrepService : companyListPrepService
},
上面有这样的broken example错误信息
Error: [$injector:unpr] Unknown provider: companyListPrepServiceProvider <- companyListPrepService <- SeedPageController