javascript - 检查父状态 Promise 是否已返回值

标签 javascript angularjs angular-ui-router

使用 AngularJSui-router 创建状态,我有一个父状态和子状态。

    .state('portfolio', {
        url: '/portfolio',
        templateUrl: 'app/templates/portfolio/portfolio.tpl.htm',
        controller: 'portfolioCtrl',
        controllerAs: '$ctrl'
    })
    .state('portfolio.patent', {
        url: '/:patentId',
        views:{
            "": {
                controller: 'caseOverviewCtrl',
                controllerAs: '$ctrl',
                templateUrl: 'app/templates/patent/case-overview.tpl.htm',
            },
            //FURTHER SIBLING VIEWS
       }
     })

在 Controller 的portfolio中,我发出请求,等待 promise ,然后在表中向用户显示数据。如果用户从表中选择一个项目,它会在子状态 portfolio.patent 中显示更多信息,并将 id 值传递给 $stateParams,然后我用它来制作$http 调用以获取更多信息。

如果我刷新页面,子状态将在父状态之前显示,因为父状态 $http 请求需要更长的时间才能解析,因为需要获取更多数据。我尝试从子状态检查 portfolioLoaded 的值,但它只检查一次。

问题

在向用户显示子状态之前,如何检查父状态 promise 是否已解决?

我看到在“portfolio.patent” View 中使用ng-show来检查 Controller 父 promise 是否已得到解决。

投资组合 Controller

var promise = patentsRestService.fetchAllPatents();
promise.then(
    function(response){
        var patents = response;
        $scope.portfolioLoaded = true;
    }
)

组合.专利 Controller

function init() {
    if($scope.$parent.portfolioLoaded) {
        $scope.parentLoaded = true;
    }
}

专利 View

<div data-ng-show="$ctrl.portfolioLoaded" class="animate-show">
   //CONTENT
</div>

最佳答案

将 promise 保存在父 Controller 中:

$scope.promise = patentsRestService.fetchAllPatents();
$scope.promise.then(
    function(response){
        var patents = response;
        $scope.portfolioLoaded = true;
    }
)

在子 Controller 中使用 promise :

function init() {
    $scope.$parent.promise.then(function() {
        $scope.parentLoaded = true;
    });
}

这将适本地延迟设置。

关于javascript - 检查父状态 Promise 是否已返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58646990/

相关文章:

javascript - React - 如何将电话号码格式化为用户类型

javascript - AngularJS:ng-checked 没有真正绑定(bind)

angularjs - 指令无权访问 Controller 功能(AngularJS)

javascript - JQuery.css ("display", "block") 仍然以内联结束

javascript - 限制文本区域添加超过其高度的文本

javascript - 我的模板没有被解析

javascript - AngularJs ui-router 任务完成

javascript - Controller 内的 angular-ui-router 函数不是函数

javascript - 检查 switch 语句中的事件 $state

javascript - 原型(prototype)并没有提供预期的结果