如何在ionic2中为验证创建单独的文件?

什鲁蒂奈尔

我正在尝试将验证方法分离到 ionic2/angular2 中的单个文件,即创建一个可重用的验证代码,我将来也可以将其用于其他项目

  1. 我想知道在 angular2 或 ionic2 中创建可重用文件的最佳方法是什么。

  2. 第二个问题是我尝试创建一个单独的validation.ts文件并调用该方法,但它给出了一个奇怪的错误。

我尝试了两种方法。首先创建一个文件username.ts并在其中创建一个方法。在第二个中,我创建了一个提供者并在其中放置了相同的方法。

代码:用户名.ts

import { FormControl } from '@angular/forms';

export class UsernameValidator {

constructor() {

}


  validateEmail(email) {
    var re = new RegExp(/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i);
    return re.test(email);
  }

  validatePhone(phone) {
      var re = /^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$/;
      return re.test(phone);
  }

  checkUsername(control){

    if(this.validateEmail(control.value)||this.validatePhone(control.value))
    {
      return true;
    }
    else
      return false;
  }



}

同样的方式提供者也

import { Injectable } from '@angular/core';
import 'rxjs/add/operator/map';

/*
  Generated class for the Validation provider.

  See https://angular.io/docs/ts/latest/guide/dependency-injection.html
  for more info on providers and Angular DI.
*/
@Injectable()
export class Validation {

  constructor() {
    console.log('Hello Validation Provider');
  }

  validateEmail(email) {
    return true;
  }

  validatePhone(phone) {
      return true;
  }

  checkUsername(control){
    console.log(control.value)
    var checkemail=this.validateEmail(control.value);
    var checkphone=this.validatePhone(control.value);
    if(checkemail||checkphone)
      return true;
    else
      return false;
  }

}

从 login.ts 文件调用函数

 this.loginForm=formBuilder.group({
        username: ['',Validators.compose([Validators.required]),validation.checkUsername],
        password: ['',Validators.compose([Validators.required])]
    });

每次我都会收到错误消息

: 无法读取未定义的属性“validateEmail”

我对 angular 和 ionic 的理解不足以克服这个错误。请帮忙

谢谢!

苏拉·拉奥

当您在此处设置功能时:

    username: ['',Validators.compose([Validators.required]),validation.checkUsername],

validation.checkUsername获取调用函数的作用域,而不是Validation您在此处需要的作用域。this所以不引用Validation.

您可以通过将函数定义为箭头函数来解决此问题:

checkUsername:any = (control) => {
    console.log(control.value)
    var checkemail=this.validateEmail(control.value);
    var checkphone=this.validatePhone(control.value);
    if(checkemail||checkphone)
      return true;
    else
      return false;
  }

在您的验证构造函数中,将函数绑定到this如下所示:

 constructor() {
    console.log('Hello Validation Provider');
    this.checkUsername = this.checkUsername.bind(this);
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 ionic2 中将 .html 文件中按钮的点击事件处理为 .ts 文件中的函数

如何在.cshrc中为别名创建单独的文件?

如何在ionic2 / 3中创建动态侧面导航菜单和子菜单

ionic2中的动态表单验证

如何在Ionic2中测试浮动操作按钮

如何在 Ionic2 中隐藏导航栏

Ionic2如何在提供程序中获取NavController

如何在Ionic2中对齐项目?

如何在ionic2中列出或删除服务,页面?

如何在ionic2中的地图上移动标记?

如何在 Ionic2 中添加用户定义的图标?

如何在ionic2中执行只读或禁用操作?

如何在ionic2中重定向

Ionic2:如何在单个页面中设置CSS

如何在 Ionic2 框架中解析 Json 数据?

如何在Java中创建定义为单独文件的类的对象?

为什么使用Ionic2创建的应用程序的www文件夹为空

如何将Ionic 2 Modal放在单独的文件中?

如何在C#中从给定的文本文件创建2个单独的list <string>

如何在Android中为Activity Java类和非Activity Java类创建单独的文件夹

如何在Powershell中验证文件是否为zip文件

如何在Opencart 2中创建单独的模板以输出类别?

如何在Ionic中为Android创建后台服务?

如何使用Swiper库在Ionic2中创建幻灯片/转盘

如何从php2文件中的ionic2 App检索请求

Ionic2 / Angular2 / TypeScript:如何在函数2016中访问DOM元素

如何在 Angular2、Ionic2 中只显示一项

如何在Ionic2中更改警报中按钮的颜色

如何创建Ionic2自定义构建过程?