3

私はログインページに取り組んでいます。私がやろうとしているのは、クラスvalidateLogin()submit(). ログインボタンをクリックすると、正常に送信され、ユーザー名とパスワードを取得できます。

submit 関数で validateLogin 関数を呼び出そうとしていますが、それを呼び出すことができません。validateLogin で崇高なテキストにエラーが表示され、Chrome ブラウザでエラーが発生しません。

import {Component} from '@angular/core';
import {NavController} from 'ionic-angular';
import {FormBuilder,Validators} from "@angular/common";

@Component({
  templateUrl: 'build/pages/home/home.html'
})

export class HomePage {

    public loginForm: any;
  public commentOnTimeOut: any;

  constructor(private navCtrl: NavController, public form:FormBuilder) {
    this.loginForm = this.form.group({
        "email":["",Validators.required],
        "password":["",Validators.required]
    })
  }

  validateLogin(cb){
    window.setTimeout( () => {
        if (this.loginForm.value.email == 'admin' && this.loginForm.value.password == 'admin123') {
          console.log("invoking If part");
          cb('valid User');
        }
        else {
          console.log("invoking elsePart");
          cb('Invalid User');
        }
    }, 3000);
  }

  submit(){

    console.log(this.loginForm.value);
    console.log(this.loginForm.value.email);
    console.log(this.loginForm.value.password);

    validateLogin(this.loginForm.value.email, this.loginForm.value.password, (response) => {
      console.log(response);
      this.commentOnTimeOut = response;
    })

    this.commentOnTimeOut = "Validating User";
    console.log(this.commentOnTimeOut);
  }  

}

submit 関数で関数 validateLogin を呼び出すにはどうすればよいですか?

これはうまく機能するデモプランカーです

エラー:

コンソールでhttp://localhost:8100/build/js/app.bundle.jsを取得 します。

私のサーブでは、次のようなエラーが発生しますTypeScript error: /home/panini/AutoSparParts/app/pages/home/home.ts(40,5): Error TS2663: Cannot find name 'validateLogin'. Did you mean the instance member 'this.validateLogin'?

上記のエラーでヘルプを呼び出しています

4

2 に答える 2

3

インスタンスclass操作しているため、そのインスタンス内のプロパティまたはメソッドを参照する場合はthis.、プロパティまたはメソッド名の前に を追加する必要があります。

私のサーブでは、TypeScript エラーのようなエラーが発生します: /home/panini/AutoSparParts/app/pages/home/home.ts(40,5): エラー TS2663: 名前 'validateLogin' が見つかりません。インスタンス メンバー 'this.validateLogin' のことですか?

thisこれは、メソッドに を追加しないvalidateLoginと、その名前のグローバル メソッドが検索され、そこにないため、エラーがスローされるためです。したがって、あなたのsubmit方法は次のようになります。

submit(){

    console.log(this.loginForm.value);
    console.log(this.loginForm.value.email);
    console.log(this.loginForm.value.password);

    this.validateLogin(this.loginForm.value.email, this.loginForm.value.password, (response) => {
      console.log(response);
      this.commentOnTimeOut = response;
    })

    this.commentOnTimeOut = "Validating User";
    console.log(this.commentOnTimeOut);
  } 

アップデート:

はい、これを試してみます。TypeScript エラーのようなエラーが発生します: /home/panini/AutoSparParts/app/pages/home/home.ts(40,5): エラー TS2346: 指定されたパラメーターが呼び出しターゲットの署名と一致しません。

これは、validateLoginメソッドが 1 つのパラメーター (パラメーター) のみを想定し、cb3 つのパラメーター (電子メール、パスワード、およびコールバック) を送信しているためです。

その行を次のように変更してみてください。

 // New method to handle the response
 processLoginResult(response) {
    console.log(response);
    this.commentOnTimeOut = response;
 }

 submit(){

    console.log(this.loginForm.value);
    console.log(this.loginForm.value.email);
    console.log(this.loginForm.value.password);

    // Instead of calling it with email, password and the callback
    // just send the added method as a callback 
    this.validateLogin(this.processLoginResult);

    this.commentOnTimeOut = "Validating User";
    console.log(this.commentOnTimeOut);
}
于 2016-08-04T09:40:22.173 に答える