我有一段时间试图找出为什么我在Angular中收到了未知提供程序错误。我已经检查了我能找到的关于这个问题的所有其他问题,并且大多数建议依赖注入错误。然而,在我看来,我不会忘记注入任何东西。我一直在尝试让resolve属性像this post by Misko一样工作。我能够在解决后解决登出员工数据的问题,但随后我收到了未知提供程序错误,这会阻止数据显示在页面上。
这是我的路由器:
"use strict";
var app = angular.module('app',[
'employeeServices'
]);
app.config(appRouter);
function appRouter ($routeProvider) {
$routeProvider
.when('/employees/:account_id', {
controller: 'EmployeeCtrl',
templateUrl: 'view/employee/view.html',
resolve: employeeCtrl.resolve
})
.otherwise({ redirectTo: '/' });
}
这是我的控制器
var employeeCtrl = app.controller('EmployeeCtrl', [
'$scope',
'employees',
function ($scope, employees) {
$scope.employee = employees;
console.log($scope.employee);
}
]);
employeeCtrl.resolve = {
employees: function (Employee, $q, $route) {
var deferred = $q.defer();
console.log("current params: ", $route.current.params.account_id);
Employee.getOne({ id: $route.current.params.account_id }, function (successData) {
deferred.resolve(successData);
}, function (errorData) {
deferred.reject(errorData);
});
return deferred.promise;
}
};
我的工厂:
angular.module('employeeServices', ['ngResource'])
.factory('Employee', ['$resource', function ($resource) {
return $resource('/employees/:id/json',
{
id: '@account_id'
},
{
'save': {
method: 'POST',
isArray: false
},
'update': {
method: 'PUT',
params: {
id: '@account_id'
}
},
'remove': {
method: 'DELETE',
params: {
id: '@account_id'
}
},
'getOne': {
method: 'GET',
params: {
id: '@account_id'
},
isArray: false
},
'query': {
method: 'GET',
params: {
id: '@account_id'
},
isArray: true
}
}
);
}]);
任何建议都会非常感激!
答案 0 :(得分:47)
所以问题是我在部分视图中通过ng-controller设置了EmployeeCtrl控制器,如下所示:
<div class="viewPage" ng-controller="EmployeeCtrl">
但是,在使用resolve时,必须通过路由器完成控制器设置,以便在运行时可用。我删除了ng-controller="EmployeeCtrl
...
<div class="viewPage">
...而且,就像从未发生过一样。
我必须注意到,我在the AngularJS IRC channel上接受了那些有耐心的人的帮助...
答案 1 :(得分:0)
由于您定义了名为Employee
的工厂,因此在将其注入控制器时,应使用完全名称来引用此模块。
var employeeCtrl = app.controller('EmployeeCtrl', [
'$scope',
'employees',
更改为
var employeeCtrl = app.controller('EmployeeCtrl', [
'$scope',
'Employee',