为了账号安全,请及时绑定邮箱和手机立即绑定

检查父状态承诺是否已返回值

检查父状态承诺是否已返回值

白衣非少年 2021-12-12 09:43:00
使用AngularJS和ui-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       }     })在portfolio控制器中,我发出请求,等待承诺,然后在表中向用户显示数据。如果用户从表中选择一个项目,它会在子 state 中显示更多信息portfolio.patent,将 id 值传递给$stateParams,然后我使用它来进行 $http 调用以获取更多信息。如果我刷新页面,子状态将显示在父状态之前,因为父状态 $http 请求需要更长的时间来解析,因为要获取更多数据。我试图从子状态检查 的值,portfolioLoaded但它只检查一次。问题在向用户显示子状态之前,如何检查父状态承诺已解决?我看到ng-show在 `portfolio.patent' 视图中使用来检查控制器是否已解决父承诺。投资组合控制器var promise = patentsRestService.fetchAllPatents();promise.then(    function(response){        var patents = response;        $scope.portfolioLoaded = true;    })投资组合.专利控制人function init() {    if($scope.$parent.portfolioLoaded) {        $scope.parentLoaded = true;    }}专利视图<div data-ng-show="$ctrl.portfolioLoaded" class="animate-show">   //CONTENT</div>
查看完整描述

2 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

将承诺保存在父控制器中:


$scope.promise = patentsRestService.fetchAllPatents();

$scope.promise.then(

    function(response){

        var patents = response;

        $scope.portfolioLoaded = true;

    }

)

在子控制器中使用承诺:


function init() {

    $scope.$parent.promise.then(function() {

        $scope.parentLoaded = true;

    });

}

这将适当延迟设置。


查看完整回答
反对 回复 2021-12-12
?
慕村9548890

TA贡献1884条经验 获得超4个赞

将父状态的调用移动到resolve:


.state('portfolio', {

    url: '/portfolio',

    templateUrl: 'app/templates/portfolio/portfolio.tpl.htm',

    controller: 'portfolioCtrl',

    controllerAs: '$ctrl',

    resolve: {

        patentData: function(patentsRestService){

            return patentsRestService.fetchAllPatents()

        }

    }

})

它总是会在子状态加载之前解决


阅读更多:https : //github.com/angular-ui/ui-router/wiki#resolve


查看完整回答
反对 回复 2021-12-12
  • 2 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号