我在这里看到了一些示例代码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中的内联解析的优点是您可以轻松地重用控制器,但可以使用相同的控制器并更改解析功能中的逻辑