AngularJs通过$ q将数据发布到服务器,并且响应延迟,$ location不能正常工作

时间:2015-04-11 13:55:26

标签: angularjs

我想创建登录表单,然后将其提交到服务器端并重定向,如果响应成功。因为延迟,$ location doen&work。

再次提交时(提交当前表格两次),它会重定向。那么问题是什么?

当我尝试使用if else而不是dojo.ajax来检查用户帐户时,重定向工作。所以我认为关键原因是延迟了。

我尝试使用resolve来处理帖子,但我发现很难通过$ scope获取表单数据,实际上$ scope doen还没有工作。你有没有解决这个问题的方法?

controller.js

    $scope.loginForm = function(){
        var loginInfo = {
                "userName":$scope.formData.userName,
                "passWord":$scope.formData.passWord
        };
        //$scope.msgText='asfdasfd';
        loginService.getLoginData(loginInfo,loginSuccess);
     };

     var loginSuccess = function(data){
        console.log('loginSuccess works//'+data);
        if(data){
            $location.path('/admin');
            console.log($location.path());
        }else{
            $scope.msgText='error';
        }
    }
}]);

Service.js

var serviceFn = {
        'getLoginData':getLoginData
};

return serviceFn;

function getLoginData(loginInfo,success){
    var data= true;
    var d = $q.defer();
    //return success(data);
    dojo.xhrPost({
        url:"/xxx?sign_in_mail="+loginInfo.userName+"&sign_in_pwd="+loginInfo.passWord,
        handleAs: "json"
     }).then(function(res){             
        d.resolve(res.items);
        if(res.items == "Success"){
            console.log(res.items+"////from service");
            data = true;

        }else{
            data = false
            console.log(res.items);
        }
    }).then(function(){
        return success(data)
    });
}

}]);

2 个答案:

答案 0 :(得分:0)

如果你肯定想使用超出角度的服务,请使用$ scope。$ digest()命令,这样angularjs就会知道何时检查变量是否有变化,因此,更新UI。

var loginSuccess = function(data){
    console.log('loginSuccess works//'+data);
    if(data){
        $location.path('/admin');
        console.log($location.path());
    }else{
        $scope.msgText='error';
    }
    $scope.$digest(); // "Hey, AngularJS, check the variables, you know..."
}

答案 1 :(得分:0)

     var loginSuccess = function(data){
        console.log('loginSuccess works//'+data);
        $scope.$apply(function(){
            if(data){
                $location.path('/admin');
                console.log($location.path());
                $scope.status = true;
            }else{
                $scope.msgText='error';
            }
        });
    };

谢谢大家,解决方案如上所述。