javascript - 尽管其他 Controller 和服务正常工作,但仍出现未知提供程序错误

标签 javascript angularjs dependency-injection angular-ui-router angularjs-service

这就是我的 app.js 的样子,我在其中为所有模板定义了状态、 Controller 和 url:

angular.module('starter', ['ionic', 'starter.controllers','starter.services'])

.run(function($ionicPlatform) {
  $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    ionic.Platform.fullScreen()
    if (window.cordova && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
    }
    if (window.StatusBar) {
      // org.apache.cordova.statusbar required
      // StatusBar.styleDefault();
      StatusBar.hide();
    }
  });
})

.config(function($stateProvider, $urlRouterProvider) {
  $stateProvider

  .state('app', {
    url: "/app",
    abstract: true,
    templateUrl: "templates/rubyonic/menu.html",
    controller: 'AppCtrl',
    reload: true
  })

  // .state('login', {
  //   url: "/login",
  //   templateUrl: "templates/rubyonic/login.html",
  //   controller: 'AppCtrl'
  // })

  .state('login', {
        url: '/login',
        templateUrl: "templates/rubyonic/login.html",
        controller: 'LoginCtrl'
    })


  .state('app.alerts', {
    url: "/alerts",
    views: {
      'menuContent': {
        templateUrl: "templates/rubyonic/alerts.html",
        controller: 'AppCtrl'
      }
    }
  })

   .state('app.studies', {
    url: "/studies",
    views: {
      'menuContent': {
        templateUrl: "templates/rubyonic/studies.html",
        controller: 'AppCtrl',
        reload: true
      }
    }
  })

   .state('app.study_collections', {
    url: "/studies/:studynodeRef",
    views: {
      'menuContent': {
        templateUrl: "templates/rubyonic/overview.html",
        controller: 'AppCtrl',
        reload: true
      }
    }
  })



  .state('app.rank-charts', {
    url: "/rank_charts",
    views: {
      'menuContent': {
        templateUrl: "templates/rubyonic/rank_charts.html",
        controller: 'AppCtrl'
      }
    }
  })

  // .state('app.overview', {
  //   url: "/overview",
  //   views: {
  //     'menuContent': {
  //       templateUrl: "templates/rubyonic/overview.html"
  //     }
  //   }
  // })

  .state('app.claim-details', {
    url: "/claim-details",
    views: {
      'menuContent': {
        templateUrl: "templates/rubyonic/claim_details.html",
        controller: 'AppCtrl'
      }
    }
  })

  .state('app.scorecards', {
    url: "/scorecards",
    views: {
      'menuContent': {
        templateUrl: "templates/rubyonic/scorecards.html",
        controller: 'AppCtrl'
      }
    }
  })

  .state('app.fnol', {
    url: "/fnol",
    views: {
      'menuContent': {
        templateUrl: "templates/rubyonic/fnol.html",
        controller: 'AppCtrl'
      }
    }
  })

  // if none of the above states are matched, use this as the fallback
  $urlRouterProvider.otherwise('/login');
})

这是我的登录 Controller :

angular.module('starter.controllers', ['highcharts-ng'])

.controller('LoginCtrl', ['$scope','$stateProvider','UserService', function($scope,$stateProvider,UserService) {  

$scope.credentials = {
    username: localStorage.getItem('username') || '',
    password: localStorage.getItem('password') || ''
};

$scope.login = function(credentails) {
    UserService.login(credentails).then(function(user) {
        $scope.loginMessage = false;
        localStorage.setItem('username', $scope.credentials.username);
        localStorage.setItem('password', $scope.credentials.password);
        $state.go('app.studies') ;

    }
     , 
    function(data) {
        $scope.loginMessage = 'Username/Password Invalid';
    }
    );
}

if($scope.credentials.username && $scope.credentials.password){
    $scope.login($scope.credentials);
}

}])

这是我的 UserService,它被注入(inject)到登录 Controller 中:

angular.module('starter.services', [])

.factory('UserService', ['$rootScope', '$q', '$http', function($rootScope, $q, $http) {

    return {

        login: function(credentails) {
            var deffered = $q.defer();

            $http({
                method: 'post',
                url: 'http://localhost/platform/j_spring_security_check',
                params: {
                    'j_username': credentails.username,
                    'j_password': credentails.password
                }
            }).success(function(user, status, headers, config) {
                userLoggedIn = true;
                // $location.path('#/app/studies');
                localStorage.setItem('lastLoginTime', new Date().getTime());
                $rootScope.$broadcast('USER_LOGIN_SUCCESS');
                deffered.resolve(user);
            }).error(function(data, status, headers, config){
                $rootScope.$broadcast('USER_LOGIN_FAILED');
                deffered.reject(data);
            });

            return deffered.promise;
        },


        isUserLoggedIn: function() {
            return userLoggedIn;
        }

    };
}])

当我运行我的应用程序时,我得到:Error: [$injector:unpr] Unknown provider: $stateProviderProvider <- $stateProvider <- LoginCtrl在我的控制台中。我知道我的 Controller 和服务设置正确,因为其他模板及其 Controller 可以正常工作。如果有人可以帮我解决这个问题,我将不胜感激。

最佳答案

出现错误的原因是,在 LoginCtrl 中,您试图注入(inject) $stateProvider 提供者,基本上提供者在 Controller 中不可用,他们可以作为服务名称访问,如果是 $state 而不是 $stateProvider inside your controller

controller('LoginCtrl', ['$scope','$stateProvider','UserService', 

应该是

controller('LoginCtrl', ['$scope','$state','UserService', 

关于javascript - 尽管其他 Controller 和服务正常工作,但仍出现未知提供程序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31440968/

相关文章:

javascript - 如何在 react 组件中添加滚动事件

javascript - 将每个字符串的第一个字母大写

javascript - AngularJS 应用程序中 _.find Lodash 语句内的大括号

asp.net-mvc-3 - 使用 EF4.3 的 MVC3 和依赖注入(inject)问题

javascript - 没有Cookie或本地存储的用户识别

javascript - 自定义插件不适用于动态生成的选择

javascript - 直接从 Ionic 选项卡调用函数 - angularjs

javascript - Service Worker 缓存在 PWA 中转换的 AngularJs 应用程序中的所有文件的最佳方法是什么?

java - jar 和源中的命名注释失败

java - 如何将参数传递给 CDI 中另一个类的注入(inject)类?