Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angularjs AppCtrl解析约定?_Javascript_Angularjs - Fatal编程技术网

Javascript Angularjs AppCtrl解析约定?

Javascript Angularjs AppCtrl解析约定?,javascript,angularjs,Javascript,Angularjs,在我的应用程序中,我需要在多个控制器中访问一些不经常更改的数据(类别) 我认为将我的“路由”控制器包装在一个APPCRL中是明智的,它将保存这些类别。我遇到的问题是,在没有路由的情况下,如何设置AppCtrl的解析 以下是我现在拥有的代码,但未定义类别提供程序: 'use strict'; var AppCtrl = ViewsDashboardApp.controller('AppCtrl', ['$scope', 'Categories', function($scope, Categ

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

我认为将我的“路由”控制器包装在一个APPCRL中是明智的,它将保存这些类别。我遇到的问题是,在没有路由的情况下,如何设置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

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

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

使用路由解析程序而不是服务/工厂的原因是什么?服务/工厂也可以充当解析吗?在返回类别之前阻止应用程序“完成”?您只需返回类别即可