【问题标题】:Checking if user exists using AngularJS and ng-if使用 AngularJS 和 ng-if 检查用户是否存在
【发布时间】:2016-04-26 08:34:59
【问题描述】:

我正在使用 Onsen UI、Monaca 和 AngularJS 构建一个跨平台应用程序。我需要根据用户输入的用户 ID 检查用户是否存在。如果找到 UserID,则将名称返回给我,否则用户将无法进入下一个屏幕。

我通过 API 调用 ($http) 发送用户 ID 并获得一个 JSON 对象作为响应。当我输入用户 ID 时,我可以检索 JSON 对象(经过测试并且可以正常工作),但我卡在了身份验证上。

当用户单击 LOG IN 按钮时,如果找到用户,我会显示一个带有用户名消息的模式 (ons-modal) 窗口,但如果找不到用户,我会一直显示消息 LOGIN FAIL .

有没有比模式窗口更好的方法来处理这个问题?

下面是我的代码。以下是返回的 JSON 示例。

[{"employee_name":"John Doe"}]

还有一个控制器可以处理 API 调用,可以假设这工作正常,因为我能够获取用户名 - 但只是停留在身份验证上。

login.html

<div style="text-align: center; color: #889DA8">
    Enter your<br><strong>User ID</strong>
</div>

<form class="login-form" style="text-align: center" name="myForm">
    <section style="padding: 8px">
        <input type="password" class="text-input--underbar" required minlength="3" maxlength="4" ng-model-options="{ debounce : 800 }" placeholder="User ID" ng-model="userIDSearch" >
    </section>

    <section style="padding: 0 8px 8px">
        <ons-button var="saveBtn" ng-disabled="myForm.$invalid" modifier="large" onclick="modal.show('modal')">Log In</ons-button>
    </section>
</form>

<!-- Displays Modal Login Confirmation Screen -->
<ons-modal var="modal">
    <div class="alert-dialog-mask"></div>

    <div class="alert-dialog alert-dialog--android">
        <div class="alert-dialog-title alert-dialog-title--android">
            <div style="text-align: center">Please confirm your name</div>
        </div>

        <div class="alert-dialog-content alert-dialog-content--android">
            <div style="text-align: center; padding-top: 10px; padding-bottom: 15px; padding-left: 10px; padding-right: 10px;">
                <p ng-repeat="userID in userIDs">

                    <!-- If returned value != 0 then we have a valid User -->
                    <!-- NOT WORKING HERE -->
                    <span ng-if="userID.employee_name !== 0 ">
                        <strong>
                            {{userID.employee_name}}
                        </strong>    
                    </span>
                    <!-- NOT WORKING HERE -->        
                    <span ng-else>
                        <strong>
                            User ID not found. Please try again.
                        </strong>    
                    </span>                           
                </p>
            </div>
        </div>

        <div class="alert-dialog-footer alert-dialog-footer--one">
            <button class="alert-dialog-button alert-dialog-button--one" ng-click="modal.hide()">Cancel</button>
            <button class="alert-dialog-button alert-dialog-button--primal alert-dialog-button--one" ng-click="myNavigator.pushPage('vehicle-id.html', {animation: 'slide'});" )>Ok</button>
        </div>
    </div>
</ons-modal>

这在应用控制器中是否会更好地处理?

appController.js

// App Controller Start
angular.module("myApp", ['onsen']).controller("appController", function($scope, $http)
{
    // Watch for changes in the User ID text field
    $scope.$watch('userIDSearch', function()
    {
       fetchUSerID(); 
    });

    // Initialising the search field
    $scope.userIDSearch = "";

    function fetchUSerID()
    {
        $http.get("mymadeupdomain/api/login.php?userid=" + $scope.search).success(function(data)
        {
            $scope.userIDs = data;
        }); 
    }
});

【问题讨论】:

    标签: javascript angularjs json onsen-ui monaca


    【解决方案1】:

    根据我从您的问题中得到的信息:

    您可以尝试将 $scope 变量初始化为 $scope.result = false; 在 $http.get() 的成功循环中(即获取用户数据),可以设置为 true。

    在您的模态窗口中,您可以使用类似的条件

    <span ng-if = 'result'><{{bind user name variable here}}</span>
    <span ng-if ='!result'>No User Found/ Login Failed</span>
    

    【讨论】:

    • 我将变量定义如下,并检查是否如果employee_name!=“0”(因为返回的员工对象总是有一个数字 - 0 表示不存在的用户和用户名现有用户)。但还是不行。也许控制器代码有问题? $scope.result = 假;函数 fetchUSerID() { $http.get("mymadeupdomain/api/login.php?userid=" + $scope.search).success(function(data){ $scope.userIDs = data; if($scope.userIDs.员工姓名!=“0”){$scope.result=真;}}); }
    • 你有没有检查 $scope.result 变量是否设置为 true...尝试调试或安慰
    • $scope.result 设置为 TRUE,但 employee_name 返回为未定义。使用下面的代码,无论用户是否存在,我都不会进入语句的 ELSE 部分。 if($scope.userIDs.employee_name != "0"){ console.log("用户 ID 是:" + $scope.userIDSearch); console.log("结果设置为最初:" + $scope.result); $scope.result = true; console.log("结果设置为:" + $scope.result); console.log("用户名范围:" + $scope.userIDs.employee_name); console.log("Data:" + data.employee_name);}else{console.log("Getting to ELSE statement");}
    • @HansMoolman 你从 ajax 返回数组所以使用$scope.userIDs[0].employee_name != "0"
    • 解决了 jcubic 的问题,谢谢!将答案标记为已解决以供参考,但它是您的答案和@SaurabhTiwari 答案的组合。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 2015-07-07
    相关资源
    最近更新 更多