angular-Js:不能在同一个控制器的不同函数调用中访问数组元素

angular-Js: not able to access array elements in different function call within same controller

本文关键字:函数调用 访问 数组元素 不能 同一个 控制器 angular-Js      更新时间:2023-09-26

我只需要在register()呼叫上存储$scope.user中的数据,并尝试使用其数据元素登录。但没有成功。我用的是最简单的方法,我想可能还有其他的方法(比如localStorage, cookies等)。我是angular的新手,不知道如何实现它们。请帮我一下……

控制器:

var app = angular.module("app",[]);     
    app.controller("ctr",function($scope){    
         $scope.user = [{
                        fname:"",
                        lname: "",
                        username: "",
                        password: ""
                        }];  
          $scope.register = function(userData){
              $scope.user.push(userData);
              alert($scope.user.username); *//show undefined*       
           };
          $scope.login = function(loginData){
             if(loginData.username == $scope.user.username) {
               alert("Login successfully!!");
              }
              else alert("Wrong user!");
           };
        });

视图:

<body ng-app="app">
    <div ng-controller="ctr">       
        <table >
             <tr>
                 <td><label>Username : </label></td>
                 <td><input type="text" ng-model="loginData.username" placeholder="Name" /></td>                 
             </tr>
             <tr>
                 <td><label>Password : </label></td>
                 <td><input type="password" ng-model="loginData.password" placeholder="Password" /></td>                 
            </tr>
            <tr>                
                <td colspan="2">
                    <input type="button" value="Login" ng-click="login(loginData)" class="save"/>
                </td>               
            </tr>
        </table>
        <table >
            <tr>
                 <td><label>First Name : </label></td>
                 <td><input type="text" ng-model="userData.fname" placeholder="First Name" /></td>               
             </tr>
             <tr>
                 <td><label>Last Name : </label></td>
                 <td><input type="text" ng-model="userData.lname" placeholder="Last Name" /></td>                
            </tr>
             <tr>
                 <td><label>Username : </label></td>
                 <td><input type="text" ng-model="userData.username" placeholder="Name" /></td>              
             </tr>
             <tr>
                 <td><label>Password : </label></td>
                 <td><input type="password" ng-model="userData.password" placeholder="Password" /></td>              
            </tr>
            <tr>                
                <td colspan="2"><input type="button" value="Register" ng-click="register(userData)" class="save"/></td>                 
            </tr>               
        </table>        
    </div>    
</body>

如果有人能帮我解决这个问题,我将非常感激。

你把userdata推到一个数组,你的$scope.user是一个数组,而不是一个对象。试试这个:

$scope.user = {};  
$scope.register = function(userData){
    $scope.user = userData;
    alert($scope.user.username);
};

由于变量$scope.user是一个数组,您应该使用如下内容:

alert($scope.user[0].username)

你的if语句为假:

if(loginData.username == $scope.user.username) {

您的$scope.user是一个数组,您应该首先搜索具有此用户名的对象,然后才能比较密码。

$scope.login = function(loginData){
             //Filter your user array and find the user with given username
             var user = $filter('filter')($scope.user, function (u) {return u.username === loginData.username;})[0];
             //Compare login data
             if (user == null) {
                alert("User not found");
             } else {
                if(user.password == loginData.password) {
                   alert("User logged in");
                } else {
                   alert("Wrong Password");
                }
             }
};

我没有机会测试我的答案,请给我一个反馈

相关文章: