【发布时间】:2019-12-13 08:12:05
【问题描述】:
我花了很长时间才弄清楚发生了什么。一个标准的 $ionicPopover 被调用,我得到一个
无法读取未定义的属性“显示”
输入控制器后,它会立即检查$stateParm - 如果已设置,则启动弹出框。但问题是 $ionicPopover 模板尚未加载到 $scope 中,所以$scope.popover.show() 正在返回错误。
当我添加了一个 setTimeout(function() { $scope.popover.show(); },2000) ; 时 - 延迟了足够长的时间以将弹出框加载到范围中并允许它启动。
尽管这个创可贴有效,但我不喜欢使用这种方法。我可以使用什么其他方法来确保 $ionicPopover/$ionicModal 都已加载其他代码被允许执行和引用它们?
$ionicPopover.fromTemplateUrl('pushPopover.html', {
scope: $scope,
focusFirstInput:false
}).then(function(popover) {
$scope.popover = popover;
});
$scope.openPopover = function() {
$scope.popover.show(); // calls before popover is loaded causing error
}
$scope.closePopover = function() {
$scope.popover.hide();
}
if ($stateParams.pushAction == 1) {
$scope.pushSub = $stateParams.pushSub ;
$scope.pushMsg = $stateParams.pushMsg ;
$scope.pushCode = $stateParams.pushCode ;
$scope.openPopover() ;
}
为了让它工作,我不得不故意用一个草率的超时来延迟通话:
if ($stateParams.pushAction == 1) {
$scope.pushSub = $stateParams.pushSub ;
$scope.pushMsg = $stateParams.pushMsg ;
$scope.pushCode = $stateParams.pushCode ;
setTimeout(function() {
$scope.openPopover() ;
},2000) ;
}
【问题讨论】:
-
使用
ng-if防止有问题的组件在所有所需数据可用之前呈现。 -
@TheHeadRush - 问题不是数据被快速返回,问题是 $ionicPopover 在加载到 $scope 之前就被调用打开。因此
Cannot read property 'show' of undefined -
如果
$scope还没有,真的有吗?
标签: angularjs ionic-framework settimeout popover ionic-v1