使用 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
}
})
在 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/