1

サービスを使用してJSON配列を正常に取得しています。次に、そのデータをコントローラーに送り込み、ユーザーがユーザー名を入力したときにデータバインドされた値と比較しようとしていますが、ログを表示していません値が一致する必要があります。ここに私が持っているものがあります:

Angular サービス:

loginApp.factory('userData', function($http, $log) {
    return {
        getUsers: function(scb) {
            $http({method: 'GET', url: 'somelink/ajax/current_users.php'}).
                    success(function(data, status, headers, config) {
                $log.info(data, status, headers(), config);
                scb(data);
            }).
                    error(function(data, status, headers, config) {
                $log.warn(data, status, headers(), config);
            });

        }
    };
});

私のコントローラー:

loginApp.controller('loginController',
        function loginController($scope, userData) {

            // If I run a log on the `activeusers` 
            // I get the same console log as below    
            userData.getUsers(function(current_users) {
                $scope.activeusers = current_users;
            });

            $scope.createAccnt = {
                fname: "",
                lname: "",
                username: function(inValue) {
                    for (var i = 0; i < $scope.activeusers.length; i++) {
                        if ($scope.activeusers[i].username == inValue) {
                            console.log("Username matches existing!!");
                        }
                    }
                },
                email: ""
            };
}

返された JSON 配列:

[
    {
        "user_id": "1",
        "username": "userone",
        "password": "",
        "first_name": "",
        "last_name": "",
        "email": "",
        "active": "",
        "auth_token": ""
    },
    {
        "user_id": "2",
        "username": "usertwo",
        "password": "",
        "first_name": "",
        "last_name": "",
        "email": "",
        "active": "",
        "auth_token": ""
    }
]

コンソールにステータス コード 200 が表示され、要求されたすべてのデータが次のように表示されます。

[Object, Object]
> 0
    user_id: "1"
    username: "userone"
    password: ""
    first_name: ""
    last_name: ""
    email: ""
    active: "1"
    auth_token: ""
    __proto__: Object
> 1
    user_id: "2"
    username: "usertwo"
    password: ""
    first_name: ""
    last_name: ""
    email: ""
    active: "1"
    auth_token: ""
    __proto__: Object

私のデータバインディングはすべて完全に機能しますが、比較だけです。for ループまたは if ステートメントが正しくありませんか?

4

1 に答える 1

2

私があなたの質問を理解していない場合は申し訳ありませんが、すべきです

for (var i = 0; i < $scope.createAccount.length; i++) {
    if ($scope.createAccount[i].username == inValue) {
        console.log("Username matches existing!!");
    }
}

本当になる

for (var i = 0; i < $scope.activeusers .length; i++) {
    if ($scope.activeusers [i].username == inValue) {
        console.log("Username matches existing!!");
    }
}

createAccount を activeusers に置き換える

于 2013-06-12T14:32:06.320 に答える