2016-08-04 18 views
2

Ich arbeite an der Anmeldeseite. Was ich versuche zu tun ist, habe ich zwei Funktionen in einer Klasse validateLogin() und submit(). Wenn ich auf den Login-Button klicke, wird mein Antrag erfolgreich abgeschickt und ich kann den Benutzernamen und das Passwort erhalten.So rufen Sie eine Funktion in einer anderen Funktion innerhalb desselben Controllers in angular2 auf

Ich versuche, meine validateLogin Funktion in meiner Submit-Funktion aufrufen, aber ich kann nicht nennen es mein sublime Text zeigt einen Fehler in der validateLogin und ich bekomme keinen Fehler in meinem Chrome-Browser.

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); 
    } 

} 

Wie kann ich meine Funktion validateLogin in meiner Submit-Funktion aufrufen? Hier

ist ein demo plunker wo es gut funktioniert

Fehler:

GET http://localhost:8100/build/js/app.bundle.js in my console.

In my serve i get error like 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'?

der obige Fehler ich Hilfe bin Aufruf

Antwort

3

Da Sie mit einer Instanz einer class arbeiten, müssen Sie die this. vor dem Namen der Eigenschaft oder Methode hinzufügen, wenn Sie auf eine Eigenschaft oder Methode innerhalb dieser Instanz verweisen möchten.

In my serve i get error like 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'?

Das ist, weil, wenn sie nicht die this zur validateLogin Methode hinzufügen, wird eine globale Methode mit diesem Namen gesucht wird, und weil er nicht da ist, wird ein Fehler ausgelöst. So soll Ihre submit Methode:

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); 
    } 

UPDATE:

yes i try that this. and i get error like TypeScript error: /home/panini/AutoSparParts/app/pages/home/home.ts(40,5): Error TS2346: Supplied parameters do not match any signature of call target.

Das ist, weil Ihre validateLogin Methode erwartet nur ein einzelner Parameter (die cb Parameter) und Sie senden drei Parameter (E-Mail, Passwort und Rückruf).

versuchen, diese Zeile wie folgt ändern:

// 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); 
} 
+0

Ja, ich versuche das 'this.und ich bekomme Fehler wie' TypeScript error:/home/panini /AutoSparParts/app/pages/home/home.ts(40,5): Fehler TS2346: Mitgelieferte Parameter stimmen nicht mit einer Signatur des Aufrufziels überein. ' –

2

Um die Teilnehmer zugreifen Sie this. vor jeder verwenden müssen Klassenmitglied, in Ihrem Fall versuchen Sie diese

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

in Ihrem Plunker Demo Sie während in Ihrer Frage mit Hilfe von Javascript sind sind Sie Typoskript verwenden, sind sie verschiedene Sprachen –

+0

ja Ich versuche, etwas, was wie zu bekommen dieser javaScript-Plünderer. Ich versuche, diese.validateLogin verwenden, aber es ist immer noch ein Fehler. –

+0

Was ist der Fehler, bitte aktualisieren Sie Ihre Frage mit mehr Informationen, wenn möglich –

Verwandte Themen