使用api调用单击按钮后更改范围值

时间:2019-05-11 22:23:43

标签: javascript angularjs

我尝试为项目编写登录功能。 这个想法是,当用户按下登录按钮时,将调用 checkLogin 函数,该函数在后台为用户检查服务器。

一切正常,除非找不到用户,然后应显示一条错误消息,该错误消息由布尔值(例如 $ scope.displayValidationMessage )和 ng控制-show 指令。

我尝试使用 $ scope。$ apply() $ scope。$ digest()无济于事。 我正在使用AngularJS 1.7.8版。

$scope.email = "";
$scope.pass = "";
$scope.displayErrorMessage = false;
$scope.displayValidationMessage = false;

$scope.checkLogin = function(){
        if($scope.email==""||$scope.pass==""){
            return $scope.displayValidationMessage=true;
        }
        var pdat = {
            username:$scope.email,
            password:$scope.pass
        };

        $http({
            method:'post',
            url: 'http://www.example.org',
            data:pdat
        }).then(function success(response){
            var resnum = response.data.resnum;
            if(resnum==1){ //User found
                var data = response.data.data;
                $cookies.put('token',data.token);
                $cookies.put('id',data.id);
                $location.path('/main')
            }else{//User not found
                $scope.displayErrorMessage = true;
            }
        },function error(response){
            $scope.displayErrorMessage=true;
        });


    };

       <div class="notification is-warning" ng-show="displayValidationMessage">
           Please fill in every field in the form!
       </div>

如何影响更改后的布尔值显示相应的错误消息?

2 个答案:

答案 0 :(得分:0)

1 :您无需将默认值设置为false,所有变量都默认为false,还需要将email和{{1 }}作为字符串为空。

pass

2 :尝试将属性转换为一个if(angular.isUndefined($scope.email)) {...} ,这将帮助您获得优化的代码。

object

3 :使用--------------------------------------Html <input ng-model="form.email"> <input ng-model="form.pass"> --------------------------------------Controller scope.form = {email: "", pass: "", message: { validation: "", error: "" } } 时不需要在angularjs中return,而您想要的是:

scope

4 if(...) { scope.x = true; return false; } 在您已经使用angularjs本机代码时不起作用,例如,当您使用$scope.$apply()时,您已经在scope中使用了angularjs:< / p>

apply()

5 :正如@briosheje在您的评论中所说,var textInput = $(".textInput").val(); //jquery selector $scope.textInput = textInput; // not bind until $apply $scope.$apply(); //scope applied 在您的$scope.displayErrorMessage中没有使用,您应该像对html那样使用它。

答案 1 :(得分:0)

当进入错误功能时(未找到用户),您将$scope.displayErrorMessage设置为true。

但是,在HTML中,只有一个div带有变量displayValidationMessage

添加另一个具有ng-show="displayErrorMessage"的div,并在其中添加如下错误消息:

 <div class="notification is-warning" ng-show="displayErrorMessage">
     User not found!
 </div>