错误:未知提供者:employeesProvider <-雇员 [英] Error: Unknown provider: employeesProvider <- employees

查看:23
本文介绍了错误:未知提供者:employeesProvider <-雇员的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我花了很长时间试图弄清楚为什么我在 Angular 中收到未知提供程序错误.我已经检查了我能找到的关于该主题的所有其他问题,并且大多数都表明依赖注入中存在错误.然而,在我看来,我并没有忘记注射任何东西.我一直在尝试让 resolve 属性像 Misko 的这篇文章.解决后,我可以通过控制台注销员工数据,但随后我收到未知提供程序错误,这会阻止数据显示在页面上.

这是我的路由器:

 "使用严格";var app = angular.module('app',['员工服务']);app.config(appRouter);功能 appRouter ($routeProvider) {$routeProvider.when('/employees/:account_id', {控制器:'EmployeeCtrl',templateUrl: 'view/employee/view.html',解决:employeeCtrl.resolve}).otherwise({ redirectTo: '/' });}

这是我的控制器

 var employeeCtrl = app.controller('EmployeeCtrl', ['$范围','雇员',功能($范围,员工){$scope.employee = 员工;控制台日志($scope.employee);}]);员工Ctrl.resolve = {员工:函数(员工,$q,$route){var deferred = $q.defer();console.log("当前参数:", $route.current.params.account_id);Employee.getOne({ id: $route.current.params.account_id }, function (successData) {deferred.resolve(successData);},函数(错误数据){deferred.reject(errorData);});返回 deferred.promise;}};

还有我的工厂:

 angular.module('employeeServices', ['ngResource']).factory('Employee', ['$resource', function ($resource) {return $resource('/employees/:id/json',{id: '@account_id'},{'节省': {方法:'POST',isArray: 假},'更新': {方法:'PUT',参数:{id: '@account_id'}},'消除': {方法:'删除',参数:{id: '@account_id'}},'得到一个': {方法:'获取',参数:{id: '@account_id'},isArray: 假},'询问': {方法:'获取',参数:{id: '@account_id'},isArray: 真}});}]);

任何建议将不胜感激!

解决方案

所以问题是我在我的局部视图中通过 ng-controller 设置了 EmployeeCtrl 控制器,如下所示:

 

然而,当使用解析时,控制器设置必须通过路由器完成,以便它在运行时可用.我删除了 ng-controller="EmployeeCtrl...

 

...而且很快,就像什么都没发生过一样.

我必须指出,我在 AngularJS IRC 频道上得到了善良、有耐心的人的帮助..

I am having a heck of a time trying to figure out why I'm getting the Unknown provider error in Angular. I've checked every other question I could find on the subject and most suggest an error in dependency injection. However, it doesn't seem to me like I'm forgetting to inject anything. I've been trying to get the resolve property to work like this post by Misko. I'm able to console log out the employee data after it's resolved, but then I get the Unknown provider error, which prevents the data from being shown on the page.

Here is my router:

    "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: '/' });
    }

Here is my controller

    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;
      }
    };

And my factory:

    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
            }
          }
        );
      }]);

Any suggestions would be so greatly appreciated!

解决方案

So the problem was that I was setting up the EmployeeCtrl controller through ng-controller inside my partial's view, like so:

    <div class="viewPage" ng-controller="EmployeeCtrl">

When using resolve, however, the controller set up must be done through the router in order for it to be available at runtime. I removed the ng-controller="EmployeeCtrl...

    <div class="viewPage">

... and presto, like nothing ever happened.

I have to note that I received help from the kind, patient folks over on the AngularJS IRC channel...

这篇关于错误:未知提供者:employeesProvider &lt;-雇员的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆