如何在ionicView.leave上停止脚本

时间:2015-08-18 20:02:01

标签: javascript cordova ionic-framework ionic

让我说在控制器中,在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()内部是什么,承诺都会被取消而且没有其他事情发生: - )

1 个答案:

答案 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 /