Разрешаване на обещание с йонно/ui-маршрутизиране

Имам някои проблеми да разбера защо обещанието ми не се изпълнява по начина, по който бих очаквал. Използвам Ionic/ui-routing.

моята услуга:

return {
    all: function () {
        $localForage.getItem('foo').then(function (bar) {
            return bar;
        });
    }
};

Когато регистрирам данни в конзолата, виждам обектите, които localForage връща от indexeddb.

моите apps.js:

.state('tab.foo', {
    url: '/foo',
    views: {
        'tab-foo': {
            templateUrl: 'templates/tab-foo.html',
            controller: 'fooCtrl as foo'
        }
    },
    resolve: {
        getData: function (Service) {
            return Service.all();
        }
    }
})

В моя контролер foo:

this.foo = getData;

Когато направя това, foo в контролера е недефиниран, някакви идеи защо? Когато влизам в конзолата, виждам, че услугата се извиква от apps.js, виждам, че е разрешена, защото виждам данните в конзолата. Използвайки ui-router, бих очаквал, че няма да зареди изгледа/контролера, докато всичко не бъде разрешено.

Използвах следното като вдъхновение, само без услугата $q. http://odetocode.com/blogs/scott/archive/2014/05/20/using-resolve-in-angularjs-routes.aspx


person Ron    schedule 27.09.2014    source източник


Отговори (1)


Има работещ пример. Тъй като контролерът ще бъде достъпен като foo, трябва да го направим така:

Присвояването на контролера в някакво свойство myData

.controller('fooCtrl', function($scope, getData) {
  this.myData = getData;
})

Извикването на шаблона ще съдържа както контролера (foo), така и неговото свойство myData

resolved stuff:
<pre>{{foo.myData | json}}</pre>

Проверете го тук

person Radim Köhler    schedule 27.09.2014
comment
Благодаря за отговора! Въпреки това изглежда все още не работи. Когато заменя обещанието в услугата с обикновена услуга, изглежда, че работи: plnkr.co/ edit/gpVwLuLshfZ8qvj8PIfd?p=preview. Когато вляза в конзолата в apps.js, стойността на Service.all() също е недефинирана. - person Ron; 27.09.2014
comment
Не съм сигурен какъв е проблемът ;( защото вашият плункер изглежда работи и може също така. така че какво не е наред? Готов съм да помогна, но сега наистина наистина не съм сигурен какво не е наред ;( - person Radim Köhler; 27.09.2014
comment
На мен ми изглежда като проблем с обещанието в сервиза. Когато влизам в лентата на услугата, получавам данни. Когато регистрирам Service.all() в apps.js, той е недефиниран. - person Ron; 27.09.2014
comment
Само за секунда. За какво говориш: Плънкер? или вашето истинско приложение? защото, бих казал, че моят плункер, а дори и вашият - с разширение на услуга работи. Правилно? - person Radim Köhler; 27.09.2014
comment
Създадох по-реален като пример, с истински JSON и $http. Отново работи: plnkr.co/edit/1q8V3BWyzMaMYx0PU6yS?p=preview - person Radim Köhler; 27.09.2014
comment
Правилно, говорех за моето истинско приложение. Гледайки последния ти плункер, открих проблема. Решението беше тази промяна на разрешаването: { getData: функция (Услуга) { return Service.all(); } за разрешаване: { return getData: function (Service) { return Service.all(); }. Благодаря! - person Ron; 27.09.2014
comment
Страхотно, радвам се, че помогна, насладете се на ъглов/йонен свят ;) - person Radim Köhler; 27.09.2014