承诺数据在路由状态改变时不呈现



例如,home route显示home feed。关于初始控制器初始化&页面重新加载。提要数据在视图中绑定和呈现。

问题:

  • 当:

    1. 任何站点内导航-例如使用ui-sref('home.feed')
    2. 功能行为重定向回state('home.feed')。即上传PIC功能:

      • 文件输入后(选择文件/图像)图像预览在添加图片状态
      • 添加图片状态具有上传功能。然后重定向到主feed。

控制器代码
function HomeController(currenAuth, feeds) {
    var vm = this;
    vm.pixData = [];

    ///// Controller activation
    activate();

    function activate() {
        if (currentAuth) {
            getHomeFeed();
        }
    }

    ///// Controller methods
    function getHomeFeed() {
        return feeds.showHomeFeed().then((results) => {
            if (results) {
                hideNoPostsContainer();
                return vm.pixData = results[0];
            }
        });
    }
}
  • vm。在视图
  • 的ng-repeat中使用pixData

试图找出最佳实践模式。确保数据的呈现。

我看到的其他要添加的选项有:

  1. rootscope美元。美元($ statechangesuccess,…
  2. 路由配置中的resolve属性

研究这个,没有关于它的明确信息。请阅读John Papa的文章:route-resolve-and-controller-activate-in-angularjs在那篇文章中,它提到在我正在使用的控制器中使用resolve或激活模式。但没有建议两者都用。

使用resolve属性似乎是确定的方法。

使用模式从这个toddmotto.com/resolve-promises-in-angular-routes/它似乎没有一个顺利的工作到目前为止,,但什么时候你想使用承诺代码直接在控制器?

不知道为什么你永远不想使用resolve属性?

路由器配置代码

.state('home.feed', {
                url: '',
                views: {
                    content: {
                        templateUrl: 'app/spaPages/home.html',
                        controller: 'HomeController',
                        controllerAs: 'hc',
                        resolve: {
                            'currentAuth': ['$firebaseAuth', ($firebaseAuth) => {
                                return $firebaseAuth().$waitForSignIn();
                            }],
                            '_pixData': ['feeds', (feeds) => {
                                return feeds.showHomeFeed().then((results) => {
                                    if (results) {
                                        console.log('called from router resolve');
                                        return results[0];
                                    }
                                });
                            }]
                        }
                    }
                }
            })

控制器代码
.controller('HomeController', HomeController);
function HomeController(currenAuth, _pixData) {
    var vm = this;
    vm.pixData = _pixData;
}

关于无法在路由更改时呈现承诺数据的原始问题的答案

此时可视为回答。

使用resolve属性可以工作。

但是仍然想知道对于承诺解析和干净的角化开发来说,最佳模式是什么或者最佳实践模式。也许他以后会再提这个问题。

最新更新