如何在angular2中的同一控制器内的另一个函数中调用一个函数

时间:2016-08-04 07:46:06

标签: angular typescript ionic2 ionic3

我正在登录页面上工作。我想要做的是我在课程validateLogin()submit()中有两个功能。点击登录按钮后,我成功提交,我可以获得用户名和密码。

我试图在我的提交函数中调用我的validateLogin函数但是我无法调用它我的sublime文本在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);
  }  

}

如何在提交函数中调用我的函数validateLogin?

这是demo plunker,效果很好

错误:

  

在我的控制台中获取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'?

的错误

以上错误我正在调用任何帮助

2 个答案:

答案 0 :(得分:3)

由于您正在使用class实例,如果要引用该实例中的属性或方法,则必须添加{{1在属性或方法名称之前。

  

在我的服务中,我收到类似TypeScript错误的错误:   /home/panini/AutoSparParts/app/pages/home/home.ts(40,5):错误TS2663:   找不到名称' validateLogin'。 您的意思是实例成员吗?   ' this.validateLogin'吗

那是因为如果不将this.添加到this方法,则会查找具有该名称的全局方法,因为它不是在那里,抛出一个错误。因此,您的validateLogin方法应为:

submit

<强>更新

  是的,我试试这个。我得到像TypeScript错误的错误:   /home/panini/AutoSparParts/app/pages/home/home.ts(40,5):错误TS2346:   提供的参数与呼叫目标的任何签名都不匹配。

这是因为您的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); } 方法只需要一个参数(validateLogin参数)并且您正在发送三个参数(电子邮件,密码和回调)。

尝试修改这样的行:

cb

答案 1 :(得分:2)

要访问班级成员,您需要在任何班级成员之前使用this.,在您的情况下尝试此

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