0

在我的应用程序中,我有一些不经常更改的数据(类别),我需要在多个控制器中访问这些数据。

我认为将我的“路由”控制器包装在包含这些类别的 AppCtrl 中会很聪明。我遇到的问题是如何在没有路线的情况下设置 AppCtrl 的解析?

这是我现在拥有的代码,但未定义类别提供程序:

'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

为什么 AppCtrl 不知道它的解析?特别是类别?谢谢。

4

1 回答 1

0

@Valentyn 的使用服务的建议在某种意义上得到了解决,这就是我的做法。

我的数据服务看起来像这样,一个类别的工厂和一个提供类别的服务。

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

这可以防止我的应用在导航其他控制器时再次发出类别请求。

于 2013-06-07T11:44:33.970 回答