将 Angular 服务注入控制器会导致 $injector:unpr 错误(使用 AngularBooter)
Injecting a Angular service into controller results in $injector:unpr error (using AngularBooter)
我在我的应用程序中使用 AngularBooter 作为 Angular。
这是我的代码:
emp.boot();
emp.services.SocialService = ['$http', '$q', function ($http, $q) {
var deferred = $q.defer();
$http.get('/api/feed').then(function (data) {
deferred.resolve(data);
});
this.getStatuses = function ()
{
return deferred.promise;
}
}];
emp.controllers.StatusesController = ['$scope','SocialService', '$interval', function($scope, SocialService, $interval) {
var statuses = SocialService.getStatuses();
statuses.then(function(data) {
$scope.statuses = data;
console.log($scope.statuses);
});
}];
据我了解,错误:Error: [$injector:unpr]
表示服务未正确注册或实施,我尝试了一些方法,但仍然 运行 遇到同样的问题。任何想法。
两个问题:
1) 在注册你的东西之前你正在启动(至少在你提供的代码中)。定义好所有内容后,在最下面做emp.boot()
。
2) 您的服务没有 returning 任何东西。例如,如果您在服务函数的最底部添加 return {};
,它应该神奇地不再抛出错误,但您可能想要 return 比那更有趣的东西。
您可以通过取消注释 return 对象所在的行并看到 Angular 再次开始工作来看到这一点。
http://codepen.io/alex-wilmer/pen/QbwNGz?editors=101
我想你可能想要这样的东西:
emp.services.SocialService = ['$http', '$q', function ($http, $q) {
var deferred = $q.defer();
$http.get('/api/feed').then(function (data) {
deferred.resolve(data);
});
return {
getStatuses = function () { // don't mix brace placement!
return deferred.promise;
}
};
}];
我在我的应用程序中使用 AngularBooter 作为 Angular。
这是我的代码:
emp.boot();
emp.services.SocialService = ['$http', '$q', function ($http, $q) {
var deferred = $q.defer();
$http.get('/api/feed').then(function (data) {
deferred.resolve(data);
});
this.getStatuses = function ()
{
return deferred.promise;
}
}];
emp.controllers.StatusesController = ['$scope','SocialService', '$interval', function($scope, SocialService, $interval) {
var statuses = SocialService.getStatuses();
statuses.then(function(data) {
$scope.statuses = data;
console.log($scope.statuses);
});
}];
据我了解,错误:Error: [$injector:unpr]
表示服务未正确注册或实施,我尝试了一些方法,但仍然 运行 遇到同样的问题。任何想法。
两个问题:
1) 在注册你的东西之前你正在启动(至少在你提供的代码中)。定义好所有内容后,在最下面做emp.boot()
。
2) 您的服务没有 returning 任何东西。例如,如果您在服务函数的最底部添加 return {};
,它应该神奇地不再抛出错误,但您可能想要 return 比那更有趣的东西。
您可以通过取消注释 return 对象所在的行并看到 Angular 再次开始工作来看到这一点。 http://codepen.io/alex-wilmer/pen/QbwNGz?editors=101
我想你可能想要这样的东西:
emp.services.SocialService = ['$http', '$q', function ($http, $q) {
var deferred = $q.defer();
$http.get('/api/feed').then(function (data) {
deferred.resolve(data);
});
return {
getStatuses = function () { // don't mix brace placement!
return deferred.promise;
}
};
}];