让我说在控制器中,在Angular / Ionic应用程序中有一段这样的代码:
myFunction()
当用户在超时5秒之前离开映射到此控制器的url时,脚本不会停止(这是有意义的)。我的问题是:setTimeout()
打开离子模式。
当用户离开页面并呈现另一个页面时。但是当渲染另一个视图时会触发myFunction(),然后,新视图中将显示前一个视图中的离子模态。我在这个例子中使用myFunction()
因为我的代码modaltimeout = $timeout(function() { myFunction(); )};
$scope.$on('$ionicView.leave', function() {
$timeout.cancel(modaltimeout);
});
是在ajax请求之后调用的(我无法控制响应时间)。
有没有办法防止当前脚本在ionicView.leave事件中执行?
编辑:我发现当视图离开时,$ scope的属性$$ disconnected设置为true。我是否必须在我的函数内检查此值是否为真,是否打开模态?而且,如果我有'n'异步函数,我是否必须在所有'n'函数中检查这个?
编辑II:我实现了一个解决方案,将myFunction()包装在$ timeout内,将其返回值分配给变量,然后在ionicView.leave上取消它:2D
所以,无论myFunction()内部是什么,承诺都会被取消而且没有其他事情发生: - )
答案 0 :(得分:0)
首先命名你的超时功能:
$scope.$on('$ionicView.beforeEnter', function() {
myVar = setTimeout(function() {
myFunction();
}, 5000)
});
在控制器中简单添加一个
$scope.$on('$ionicView.beforeLeave', function(){
clearTimeout(myVar);
});
然后当您离开视图时,您的超时将被清除。
EDIT!
您可以使用.then回调来控制何时在http请求之后调用函数。它将在你的ajax调用完成后运行。这是一个例子。
var req = {
url: 'https://yoururl.com',
method: "GET",
headers: {}
}
$http(req).success(function(data, status, headers, config){
}).error(function(data, status, headers, config){
}).then(function(data, status, headers, config){
//put code here to run after the http call
})
编辑2:
在回调的.then()部分中,只需检查使用
加载的状态 $ionicHistory.currentStateName()
所以它看起来像
.then(fucntion(data, status, headers, config){
if($ionicHistory.currentStateName() === "about"){
//open modal
}
})
检查您是否在约视图中。如果你是拉起模态,如果不是。简单的peasy柠檬squezzy。有关检查状态/视图的详细信息,请参阅http://ionicframework.com/docs/api/service/ $ ionicHistory /