如何处理angularjs中的回调?

哈桑

我有一个注册机制,其中rootscope变量是通过服务发送的。成功后,它将更新该$rootScope.success字段。但是angularjs服务是依赖于回调的。该服务更新了rootscope.success,但是函数顺序执行了代码。

我如何等待服务完成其响应,然后进行进一步处理?

.controller('RegisterAccountCtrl', function ($scope,$rootScope,registerUser,$location) {

    $rootScope.success = false;
    $scope.registration = $rootScope.registration;

$scope.getEnterGeneratedCode = function(){
        $rootScope.registration = $scope.registration;
        registerUser.registerUser();
        if($rootScope.success){
           $location.path('/confirm');
        }
}

和内部服务

.service('registerUser',function($http,$rootScope,$ionicLoading){
    this.registerUser = function(){
        $ionicLoading.show();
        $http({
            method: 'POST',
            datatype:'json',
            data:{obj:$rootScope.registration},
            url: 'http://localhost/LoginService.asmx/CreateUser',
            contentType: "application/json; charset=utf-8",
            cache: false
        }).success(function (data, status, headers, config){
            if (status == '200') {
                var obj = data;
                $rootScope.success = true;
                $ionicLoading.hide();
                //alert(obj);
            }
        }).error(function (data, status, headers, config){
            $ionicLoading.hide();
        });
    };

 return this;
})
西蒙·斯塔顿

您想$http从registerUser返回请求,然后可以在控制器中使用该请求,就像在服务中使用该请求一样。

控制器:

registerUser.registerUser().success(function(data, status, headers, config){
   //This code will now execute when the $http request has resolved with a success
   if($rootScope.success){
      $location.path('/confirm');
   }
}).error(function(error, status, headers, config){
   //An error occurred in $http request
   console.log(error); 
});

服务:

this.registerUser = function(){
    $ionicLoading.show();
    return $http({
        method: 'POST',
        datatype:'json',
        data:{obj:$rootScope.registration},
        url: 'http://localhost/LoginService.asmx/CreateUser',
        contentType: "application/json; charset=utf-8",
        cache: false
    }).success(function (data, status, headers, config){
        if (status == '200') {
            var obj = data;
            $rootScope.success = true;
            $ionicLoading.hide();
            //alert(obj);
        }
    }).error(function (data, status, headers, config){
        $ionicLoading.hide();
    });
};

一些值得注意的事情...

您从不需要的服务返回,该服务作为实例工作,因此该实例已被注入。这是一家需要退货的工厂(单人)。

您要设置$scope.registration$rootScope.registration您的函数相同,然后再设置$rootScope.registration为与函数相同,这是不必要的,并且无论如何应原型继承。$scope.registrationgetEnterGeneratedCode

您应该始终尝试使用以下方式定义行为:

.controller('RegisterAccountCtrl', ['$scope', '$rootScope', 'registerUser', '$location', function($scope, $rootScope, registerUser, $location){

}]);

除非$rootScope.success在其他地方使用它,否则当前无用设置,我建议您避免在$ rootScope上设置道具,因为它会很快失去控制。

这是您的代码的简化版本:

.controller('RegisterAccountCtrl', [
    '$scope',
    '$rootScope',
    'registerUser',
    '$location',
function($scope, $rootScope, registerUser, $location) {

    $scope.getEnterGeneratedCode = function() {
        $ionicLoading.show();
        registerUser.registerUser().success(function(data, status, headers, config) {
            if (status == '200') {
                var obj = data;
                $ionicLoading.hide();
                $location.path('/confirm');
                //alert(obj);
            }
        }).error(function(data, status, headers, config) {
            $ionicLoading.hide();
        });

    }

}])

.service('registerUser', [
    '$http',
    '$rootScope',
    '$ionicLoading',
function($http, $rootScope, $ionicLoading) {

    this.registerUser = function() {
        return $http({
            method: 'POST',
            datatype: 'json',
            data: {
                obj: $rootScope.registration
            },
            url: 'http://localhost/LoginService.asmx/CreateUser',
            contentType: "application/json; charset=utf-8",
            cache: false
        });
    };

}]);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何处理flask中的回调数据

来自分类Dev

如何处理回调注册

来自分类Dev

如何处理 ISR 回调?

来自分类Dev

如何处理Ajax.BeginForm()OnError OnFailure回调?

来自分类Dev

如何处理Ajax.BeginForm()OnError OnFailure回调?

来自分类Dev

在片段内部调用Camera Service,如何处理回调?

来自分类Dev

java如何处理Rabbitmq消息的回调

来自分类Dev

RequestJS实际如何处理其回调?

来自分类Dev

JSF 2.2:如何处理Coinbase回调?

来自分类Dev

如何处理在AngularJS中禁用的JavaScript

来自分类Dev

如何处理AngularJS中的加载?

来自分类Dev

如何处理angularjs中的响应?

来自分类Dev

React如何处理传递给事件处理程序的函数/回调?

来自分类Dev

具有回调功能的网络请求,如何处理排队请求的结果

来自分类Dev

Erlang:如何处理长时间运行的init回调?

来自分类Dev

如何处理来自带有回调的多个ajax异步调用的数据?

来自分类Dev

如何在Swift中处理C枚举回调函数

来自分类Dev

如何在NodeJS中处理Coinbase回调?

来自分类Dev

angularjs如何处理csrf?

来自分类Dev

如何处理可能是angularjs中$ q承诺的对象?

来自分类Dev

如何处理angularJS中$ http.post的异步返回?

来自分类Dev

ng-app 如何处理 AngularJs 中的空白模块

来自分类Dev

RequestJS如何实际处理其回调?

来自分类Dev

如何正确处理回调堆栈

来自分类Dev

用户回调中未处理的异常

来自分类Dev

在iOS中处理回调的更好方法

来自分类Dev

在异步回调函数中处理MemoryStream

来自分类Dev

在回调函数中处理数据

来自分类Dev

处理我的库中的回调