只有在angular服务从服务器获取数据并完成执行后,才能执行特定的代码块
Executing certain block of code only after angular service gets data from server and completes its execution
在我的服务中:
appRoot.factory('ProgramsResource', function ($resource) {
return $resource('Home/Program', {}, { Program: { method: 'get', isArray: false } })
});
在我的控制器中:
appRoot.controller('ProgramCtrl', function ($scope, ProgramsResource) {
$scope.searchPrograms = function () {
$scope.Programs = ProgramsResource.get(
{
Name: $scope.searchProgramName,
});
};
$scope.SortBy = "Name";
$scope.searchPrograms();
//Lines of code which I want to execute only after the searchPrograms() completes its execution
$scope.TotalItems = $scope.Programs.TotalItems;
$scope.ItemsPerPage = $scope.Programs.ItemsPerPage;
});
searchPrograms()负责从服务器获取数据。并且仅在第$scope.searchPrograms()行之后我想执行以下代码:
$scope.TotalItems = $scope.Programs.TotalItems;
$scope.ItemsPerPage = $scope.Programs.ItemsPerPage;
但事情并非如此。它不是在等待searchPrograms()完成操作并执行下面的代码行。在js中,它不会等待ajax完成并执行下面的行,这是正在发生的。为了只在ajax完成后执行某些代码,js中有回调函数的概念,而angular中也有promise的概念。
我收到了一篇关于棱角分明的承诺的文章,但我不明白,在我的情况下,我应该如何使用这些承诺。
您可以在ProgramResource.get:中添加回调函数参数
$scope.searchPrograms = function () {
$scope.Programs = ProgramsResource.get(
{
Name: $scope.searchProgramName,
}, function () {
$scope.TotalItems = $scope.Programs.TotalItems;
$scope.ItemsPerPage = $scope.Programs.ItemsPerPage;
});
};
您应该使用$q和递延承诺,这样您就可以执行类似的操作
$scope.searchPrograms().then(function(data) { // data is the data that search programs should return
$scope.TotalItems = $scope.Programs.TotalItems;
$scope.ItemsPerPage = $scope.Programs.ItemsPerPage;
}
确保searchPrograms返回promise。
var deferred = $q.defer();
var callback = function (response) {
if(response.error) {
deferred.reject(response.error)
}
deferred.resolve(response);
};
//Your service call that need a callback like myService.request(callback);
return deferred.promise;
因此,当请求完成时,代码将在.then(function(data) {
中执行
相关文章:
- 有没有一种方法可以通过只引用JavaScript来执行代码
- jQuery在类更改时执行代码
- 如果此代码运行,请执行代码
- Javascript等待ajax成功后再执行代码
- 如何在onclick事件执行代码时在ImageButton上设置加载gif
- php,如果我点击按钮程序重新加载页面,并且从不继续执行代码
- Javascript渲染.如何编写Javascript;t在函数调用结束之前继续执行代码
- 无法让 jQuery 以正确的顺序执行代码
- ReactJS:在带有 ajax 调用的 .map() 语句完成后执行代码
- 从一个文本框执行代码,并在另一个文本框中以 HTML 显示输出
- 自执行代码中的“this”
- 为什么Javascript不按顺序执行代码
- 如何在javascript中连续执行代码
- 加载所有图像后执行代码
- 按下多个按钮时执行代码
- 如何在检索到数据后使用drawCallback执行代码
- 等待promise解析后再执行代码
- jQuery没有为具有新id的新元素执行代码
- 如何在客户端Collection增长时立即反应性地执行代码
- 如何将变量表达式转换为可执行代码(而不是替换值)