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?


Но я не понимаю, как я мог бы заставить это работать ?



Мне бы очень понравилась любая обратная связь, я в убыток.

564   2  

2 ответов:

Невозможно определить как ' TestCtrl.resolve', если вы хотите использовать resolve С.синтаксис контроллер, затем вы должны определить внутри поставщиком маршрут . Преимущество встроенного разрешения в routeprovider заключается в том, что вы можете легко повторно использовать контроллер, но использовать тот же контроллер и изменять логику в функции resolve

Вы также можете воспользоваться услугой:

resolve: {data : function(service) {
  return service.getData();
}}

Comments

    Ничего не найдено.