AngularJS:不在RouteProvider中而是在Controller中解析?

在这里看到了一些示例代码 Delaying AngularJS route change until model loaded to prevent flicker

我马上就知道这是正确的方法,我只需要在完成加载后才能使控制器加载,通常大多数示例都会告诉您将routeprovder中的代码解析为内联函数,但这听起来不对.控制器需要它,所以为什么不让控制器实现要解决功能.这听起来就像我在寻找的那样.这似乎使用了原型模式??

function PhoneListCtrl($scope,phones) {
  $scope.phones = phones;
  $scope.orderProp = 'age';
}

PhoneListCtrl.resolve = {
  phones: function(Phone,$q) {
    // see: https://groups.google.com/forum/?fromgroups=#!topic/angular/DGf7yyD4Oc4
    var deferred = $q.defer();
    Phone.query(function(successData) {
            deferred.resolve(successData); 
    },function(errorData) {
            deferred.reject(); // you Could optionally pass error data here
    });
    return deferred.promise;
  }
}

问题是我的控制器是这样的

'use strict';

angular.module('TestApp')
  .controller('ItemsCtrl',function ($scope) {
});

那么当我的控制器在模块内声明时,如何在控制器上应用新功能

我真正需要的是类似的东西

TestCtrl.resolve = {
      items: function( $q) {
          ..........
        return deferred.promise;
      }
    }

然后这将允许我在我的routeprovider ..

when('/items',{
    templateUrl: 'views/items.html',controller: 'TestCtrl',resolve: 'TestCtrl.resolve'}). // Need to use ' around resolve?

但我很困惑如何让这个工作?

我真的很喜欢任何反馈,我很茫然.

解决方法

如果要使用.controller语法使用resolve,则无法定义类似’TestCtrl.resolve’,那么您必须在路由提供程序中定义内联. routeprovider中内联解析的优点是您可以轻松地重用控制器,但使用相同的控制器并更改解析函数中的逻辑

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...