我正在开发一个应用程序,它使用AngularJS作为前端,Sails.js作为后端。有一个搜索页面,用户可以在其中搜索符合给定条件的一组项目。这个结果可能非常大,所以在我们的查询中,我们使用limit和skip循环遍历数据。
我们正在使用sails-mysql适配器,现在正在使用Model.query方法。我们可能会改变这个以使用水线的内置关联,但还没有。当用户点击搜索时,来自前端的查询开始如下:
for(var i = 0;i < $scope.icount; i = i + $scope.limit){
$http.get(SAILS_URL + '/details/getItems?i_name=' + $routeParams.item + '&i_version="' + $routeParams.iversion + '&limit=' + $scope.limit + '&skip=' + i, {withCredentials:true})
.success(function(data) {
$scope.gridOptions.data.push.apply($scope.gridOptions.data, data);
numLoaded += $scope.limit;
});
}
getItems方法只获取一些URL参数,并且有一个Model.query调用来从MySQL获取数据。
问题是,当离开视图时,查询或循环可以继续,并且可以减慢该用户的整个应用程序的速度,直到完成为止。有没有办法从Angular前端向Sails后端发送信号,用户已从视图导航并停止查询?当有人从视图导航时,angular会终止任何正在运行的循环吗?
我被建议在风帆中使用听众,例如:
req.connection.addListener('close', function () {
console.log('all done here');
// callback is fired when connection closed (e.g. closing the browser)
});
但是我们不确定要听什么或如何从Angular发送事件。是听众的方式吗?或者,还有更好的方法?谢谢!