AngularJS: разрешение не в RouteProvider, а в контроллере?
Я видел здесь пример кода задержка изменения маршрута AngularJS до загрузки модели, чтобы предотвратить мерцание
И сразу же я подумал, что это был правильный путь, мне нужно, чтобы мой контроллер загружался только тогда, когда resolve закончит загрузку, обычно большинство примеров вокруг говорят вам, чтобы поместить код под resolve в 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?
Но я не понимаю, как я мог бы заставить это работать ?
Мне бы очень понравилась любая обратная связь, я в убыток.
2 ответов:
Невозможно определить как ' TestCtrl.resolve', если вы хотите использовать resolve С.синтаксис контроллер, затем вы должны определить внутри поставщиком маршрут . Преимущество встроенного разрешения в routeprovider заключается в том, что вы можете легко повторно использовать контроллер, но использовать тот же контроллер и изменять логику в функции resolve
Вы также можете воспользоваться услугой:
resolve: {data : function(service) { return service.getData(); }}
Comments