Разрешение обещаний с помощью ionic/ui-routing

У меня возникли проблемы с выяснением того, почему мое обещание не выполняется так, как я ожидал. Я использую Ionic/UI-маршрутизацию.

мой сервис:

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

Когда я записываю данные в консоль, я вижу объекты, которые localForage возвращает из indexeddb.

мои приложения.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
Правильно, я говорил о своем реальном приложении. Глядя на ваш последний plunker, я нашел проблему. Решение заключалось в том, что изменение разрешения: { getData: function (Service) { return Service.all(); } для решения: { return getData: function (Service) { return Service.all(); }. Спасибо! - person Ron; 27.09.2014
comment
Отлично, рад, что это помогло, наслаждайтесь угловым / ионным миром;) - person Radim Köhler; 27.09.2014