我在这里看到了一些示例代码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”那样进行定义,则必须在route provider中定义内联。 routeprovider中的内联解析的优点是您可以轻松地重用控制器,但可以使用相同的控制器并更改解析功能中的逻辑

10-05 18:40