Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 路由更改后销毁$http成功/错误代码段_Angularjs_Http_Angular Ui Router_Q - Fatal编程技术网

Angularjs 路由更改后销毁$http成功/错误代码段

Angularjs 路由更改后销毁$http成功/错误代码段,angularjs,http,angular-ui-router,q,Angularjs,Http,Angular Ui Router,Q,问题可以在这里看到: 我运行route1,我有一个$timeout函数。我快速切换到route2,然后route1的延迟代码显示出来。我想销毁$timeout函数中运行的所有代码,在实际情况下,这是一个$http服务请求,并显示来自以前路由的错误消息。这里的解决方案是:先清理后清理 向控制器和指令添加拆卸代码 控制器和指令在销毁之前发出一个事件。在这里,您有机会拆除插件和侦听器,并执行垃圾收集 订阅$scope.$on('$destroy',…)事件 所以,不是这个(有) 我们应该这样做: c

问题可以在这里看到:


我运行route1,我有一个$timeout函数。我快速切换到route2,然后route1的延迟代码显示出来。我想销毁$timeout函数中运行的所有代码,在实际情况下,这是一个$http服务请求,并显示来自以前路由的错误消息。

这里的解决方案是:先清理后清理

向控制器和指令添加拆卸代码
控制器和指令在销毁之前发出一个事件。在这里,您有机会拆除插件和侦听器,并执行垃圾收集

订阅$scope.$on('$destroy',…)事件

所以,不是这个(有)

我们应该这样做:

controller: function($scope, $timeout) {

    var removeTimer = $timeout(function() {
      alert("Hey I'm message from route 1!");
    }, 5000) 

    $scope.$on('$destroy', function(){
      $timeout.cancel(removeTimer); 
      console.log('all cleared')
    });
}
不说-$http已取消。。。它迟早会从服务器上发出

关键是,如果repsonse出现时(在
.then()
的内部)可能会触发任何重影操作,我们应该清除它们或检查状态是否已消失

选中它

返回一个
承诺
,可以通过调用
取消
方法来销毁该承诺

//save the link to a promise
 $rootScope.dataRequestPromise = $timeout(function() {
      alert("Hey I'm message from route 1!");
    }, 5000);

//resolve a promise
$rootScope.dataRequestPromise.cancel()

谢谢为了获得更好的文档,在angular中取消$http请求的答案如下:如果这有帮助,那就太好了,先生!享受
UI路由器
,很棒的工具;)
//save the link to a promise
 $rootScope.dataRequestPromise = $timeout(function() {
      alert("Hey I'm message from route 1!");
    }, 5000);

//resolve a promise
$rootScope.dataRequestPromise.cancel()