首页 文章

用离子/ ui路由解决承诺

提问于
浏览
3

我有一些问题,弄清楚为什么我的承诺没有解决我期望的方式 . 我正在使用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

1 回答

  • 3

    有一个working example . 因为控制器可以作为foo使用,我们应该这样做:

    控制器分配到某些 property myData

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

    模板调用将包含controller(foo)及其属性myData

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

    检查一下here

相关问题