我试图解决这个问题,试图解决需要注入控制器构造函数的数据时遇到的问题。控制器定义如下......
var dashboardCtrl = function ($scope, profile) {
$scope.profile = profile;
$scope.fullName = function () {
if ($scope.profile == null)
return null;
return $scope.profile.firstName + " " + $scope.profile.lastName;
}
}
注意它需要一个对象(profile
)。这是控制器的注册方式......
var centralApp = angular.module("centralApp", ['ngRoute', 'ngCookies']);
centralApp.factory("accountsFactory", accountsFactory);
centralApp .controller("dashboardCtrl", ["$scope", "profile", dashboardCtrl]);
帐户工厂只需对后端RESTful服务执行与帐户相关的操作。然后,在应用程序的配置功能中,我已将路由定义如下......
var configFunc = function ($routeProvider, $httpProvider) {
$routeProvider.
when('/', {
templateUrl: '/dashboard',
controller: "dashboardCtrl",
resolve: {
profile: function (accountsFactory) {
return accountsFactory.profile();
}
}
});
}
最后accountsFactory
的定义如下......
var accountsFactory = function ($http, $q) {
return {
profile: function () {
var deferred = $q.defer();
$http.get("https://api.domain.com/profiles/me")
.success(function (data) {
deferred.resolve(data);
})
.error(function (data) {
deferred.reject(data);
});
return deferred.promise;
}
};
}
accountsFactory.$inject = ["$http", "$q"];
现在,发生的事情是当控制器被实例化时,我得到以下错误......
https://docs.angularjs.org/error/ $注射器/ unpr?P0 = profileProvider 未知提供者:profileProvider
有趣的是,我可以看到profile
包含我在使用Chrome的开发者工具时所期望的数据,但Angular仍然坚持认为出现了问题
profileProvider
来自何处?
为什么我可以在Chrome的开发者工具上看到profile
确实是用数据实例化的?
我已经尝试过在SO上找到的不同方法但我无法通过这一点。 任何指针都将受到高度赞赏
答案 0 :(得分:1)
您不需要在创建控制器的位置注入profile
。路由器负责从您的解析函数中注入profile
。
您没有profileProvider
,这就是您收到错误的原因。你有一个来自路由器的profile
解析器。虽然注入两者都是不同的,但resolve
中的函数对于该特定状态是本地的。
您应该在dependancy injection property $inject
of your controller instead上注明profile
:
var dashboardCtrl = function ($scope, profile) {
...
}
dashboardCtrl.$inject = ['$scope', 'profile'];
centralApp .controller("dashboardCtrl", ["$scope", dashboardCtrl]);