簡體   English   中英

TypeError:無法使用AngularJS從數組讀取未定義的屬性“ 0”

[英]TypeError: Cannot read property '0' of undefined from the Array using AngularJS

我正在嘗試創建一個網頁,當用戶從登錄頁面登錄時,我的頁面即“用戶管理”頁面應顯示屬於登錄用戶公司的用戶。

例如:屬於APPLE公司的用戶登錄時,此網頁應僅顯示屬於APPLE的用戶。

在代碼中,“ currentUser”是我通過localStorage getItem從登錄頁面獲得的登錄用戶。 “ allUsers”數組是來自不同公司的所有用戶的列表。 空數組“用戶”應僅顯示allUsers列表中的當前用戶公司的用戶。

為此,我使用了在JS文件末尾看到的FOR LOOP。 我收到一個錯誤,指出“公司”屬性未定義。 尋找某人來幫助我。 提前致謝。

  var myApp = angular.module("myApp", []);

    myApp.controller("myController", function ($scope) {
        console.log("in controller...");
        $scope.newUser = {};
        $scope.info = "";

        if ($scope.users = JSON.parse(localStorage.getItem("users")) !== null) {

            $scope.users = JSON.parse(localStorage.getItem("users"));
        }

        if (localStorage.getItem("currentUser") !== null) {

            var currentUser = JSON.parse(localStorage.getItem("currentUser"));
            console.log("Received");
        }
        else {
            console.log("Not received");
        }

        if (localStorage.getItem("allUsers") === null) {
            $scope.allUsers = [
                { email: "John@yahoo.com", password:"John123", firstName: "John", lastName: "Doe", contact: "281-283-2480", role: "Supplier-Admin", company: "Apple" },
                { email: "Rick@yahoo.com", password: "Rick123", firstName: "Rick", lastName: "Fraiser", contact: "987-283-2489", role: "Supplier-User", company: "Apple" },
                { email: "Sam@yahoo.com", password: "Sam123", firstName: "Sam", lastName: "Tarly", contact: "456-786-2480", role: "BuyerAdmin", company: "Samsung" }
            ];
            localStorage.setItem("allUsers", JSON.stringify($scope.allUsers));
            // localStorage.setItem("users", JSON.stringify($scope.users));
        } else {
            $scope.allUsers = JSON.parse(localStorage.getItem("allUsers"));
        }

        //filter allUsers based on currentUser's role
        for (var i = 0; $scope.allUsers.length; i++) {
            $scope.users = [{}];
            if ($scope.allUsers[i].company === currentUser[0].company) {
                $scope.users.push($scope.allUser[i]);
            }
            localStorage.setItem("users", JSON.stringify($scope.users));
        }
    });

如果鍵在localStorage中具有null值,則localStorage.getItem()將返回null的字符串表示形式,因此您的null檢查可能不符合預期。 我建議將getItem包裝在檢查該功能的函數中。

function(itemName) {
  const item = localStorage.getItem(itemName);
  return item === 'null'
    ? null
    : item;
}

您的問題可能在您設置currentUser的地方,可能是由於相同的null檢查。

也可以嘗試在for循環中聲明i變量。

for(var i = 0; ...) ...

編輯

該行似乎有錯誤

if ($scope.allUsers[i].company === currentUser[0].company) {
  $scope.users.push($scope.allUser[i]);
}

您正在嘗試推送未定義的$ scope.allUser [I],您可能打算編寫$ scope.allUsers [I]。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM