私はAngularアプリで作業していますが、コントローラ内ではオブジェクトの配列を反復処理する必要があります。これは、コントローラと、このような状況に関与コードです:javascriptオブジェクトの配列を繰り返し処理する
TypeError: Cannot read property 'Symbol(Symbol.iterator)' of undefined
at m.scope.login (loginController.js:44)
...
:
myapp.controller('LoginController', ['$scope', function(scope) {
// Users for test
this.users = [
{
name: 'admin',
password: 'admin',
role: 'ADMIN'
},
{
name: 'employee',
password: '12345',
role: 'EMPLOYEE'
}
];
console.dir(this.users); // Prints an array of objects correctly
// called when user submits
scope.login = function() {
console.log('login(). User: ');
console.dir(scope.user); // Prints the object with user's input (also correct)
var found = false;
for(let u of this.users) {
console.log('Comparing with:');
console.dir(u);
if(u.name == scope.user.name && u.password == scope.user.password) {
console.log('Found!');
found = true;
// do something else...
}
}
if(!found) { // show error message... }
}
}]);
問題は、私は、ログインフォームを送信するとき、私は、コンソールにエラーメッセージが表示されます(scope.login()
に呼び出す)ということですloginController.js:44
はfor(let u of this.users) {
行に対応します。私はウェブ(W3 Schools、MDN、そしてこのサイトも検索)を検索しましたが、解決策は私のためには機能しませんでした。これはCannot read property 'length' of undefined
にエラーメッセージを変更し、私はそれは単純なものだということを感じているが、私は姿をcant't:
for(var u of this.users)
var u; for(u in this.users)
for(var i = 0; i < this.users.lenght; i++)
:私はすでに次の解決策を試してみましたそれは何か(私は非常にJavascriptで熟練していない、申し訳ありません)。誰もがこの問題で私を助けることができますか?ご回答いただきありがとうございます。
を使用すると、 'this.users'未定義のですか? –
なぜあなたは 'this'を使っていますか? 'scope'や普通の' var'や 'let'を使うべきでしょうか?なぜなら、関数に到達すると、 'this'は関数を指しているからです。 – Chifilly
@Chifillyそれは' controller as'構文です。 '$ scope 'の方が好きです – mhodges