Javascript Angularjs AppCtrl解析约定?
在我的应用程序中,我需要在多个控制器中访问一些不经常更改的数据(类别) 我认为将我的“路由”控制器包装在一个APPCRL中是明智的,它将保存这些类别。我遇到的问题是,在没有路由的情况下,如何设置AppCtrl的解析 以下是我现在拥有的代码,但未定义类别提供程序:Javascript Angularjs AppCtrl解析约定?,javascript,angularjs,Javascript,Angularjs,在我的应用程序中,我需要在多个控制器中访问一些不经常更改的数据(类别) 我认为将我的“路由”控制器包装在一个APPCRL中是明智的,它将保存这些类别。我遇到的问题是,在没有路由的情况下,如何设置AppCtrl的解析 以下是我现在拥有的代码,但未定义类别提供程序: 'use strict'; var AppCtrl = ViewsDashboardApp.controller('AppCtrl', ['$scope', 'Categories', function($scope, Categ
'use strict';
var AppCtrl = ViewsDashboardApp.controller('AppCtrl', ['$scope', 'Categories',
function($scope, Categories) {
console.log(Categories);
}
]);
AppCtrl.resolve = {
Categories: ['$q', 'Category',
function($q, Category) {
var defer = $q.defer();
Category.query(function(categories) {
defer.resolve(categories);
}, function(data) {
defer.reject(data);
});
return defer.promise;
}
]
};
但当我运行此代码时,我得到:
Error: Unknown provider: CategoriesProvider <- Categories
Error:Unknown provider:CategoriesProvider@valentin关于使用服务的建议在某种意义上是可行的,下面是我是如何做到的
我的数据服务看起来像这样,一个类别工厂,一个提供类别的服务
angular.module('CategoryService', ['ngResource'])
.factory('Category', ['$resource',
function($resource) {
return $resource('url');
}])
.service('Categories', ['$q', 'Category',
function($q, Category) {
var defer = $q.defer();
Category.query(function(categories) {
defer.resolve(categories);
}, function(data) {
defer.reject(data);
});
return defer.promise;
}]);
然后,在任何需要类别的路由中,我可以只请求类别服务,返回承诺或已解析的数据:
resolve: {
Categories: ['Categories',
function(Categories) {
return Categories;
}]
这将防止我的应用程序在导航其他控制器时再次发出类别请求。使用路由解析程序而不是服务/工厂的原因是什么?服务/工厂也可以充当解析吗?在返回类别之前阻止应用程序“完成”?您只需返回类别即可