我有一段时间想弄清楚为什么我在Angular中收到Unknownprovider错误。我检查了我可以在该主题上找到的所有其他问题,并且大多数都提出了依赖项注入中的错误。但是,在我看来,好像没有忘记注入任何东西。我一直在尝试使resolve属性像Misko的这篇文章一样工作。解决该问题后,我可以控制台注销员工数据,但是随后出现Unknown provider错误,这将阻止数据显示在页面上。
这是我的路由器:
"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 } } ); }]);
任何建议将不胜感激!
所以问题是我正在局部视图中通过ng-controller设置EmployeeCtrl控制器,如下所示:
<div class="viewPage" ng-controller="EmployeeCtrl">
但是,在使用resolve时,必须通过路由器完成控制器的设置,以使其在运行时可用。我删除了ng-controller="EmployeeCtrl…
ng-controller="EmployeeCtrl
<div class="viewPage">
……而且,就像没有任何事情发生一样。
我必须指出,我在AngularJS IRC频道上得到了善良,耐心的同伴的帮助…