我正在尝试了解角度服务和组件的生命周期。
假设我有一个使用http服务的控制器:
function MyController($scope, $http) {
$http.get('/service').success(function(data) {
// handle the response
});
}
问题是该控制器可能附加到视图。并且我想确保在删除视图时放弃响应,这是为了防止与应用程序的其他部分中可能触发的其他请求冲突。是否会破坏控制器的实例,如果视图被删除,是否会取消$http
服务的待处理呼叫?例如,当用户从页面导航(不重新加载)导致Javascript渲染新部分时?
[编辑]我创建了一个jsfiddle,表明至少对于$ timeout服务,在导航销毁$scope
后,挂起的操作仍在运行远。是否有一种简单的方法可以将异步操作附加到作用域,以便自动销毁它们?
答案 0 :(得分:2)
首先,附加对您的承诺的引用,然后将该引用传递给cancel
函数。这可以通过拒绝来解决这个问题。因此,您也可以使用promise.reject()
代替cancel(promise)
function MyController($scope, $http) {
var promise = $http.get('/service');
promise.success(function(data){
});
$scope.$on(
"$destroy",
function() {
promise.reject("scope destroyed, promise no longer available");
}
);
}