angular4 form表單驗證


<!-- novalidate 清除瀏覽器默認的校驗行為 -->
<form [formGroup]="formModel" (ngSubmit)="onSearch()" novalidate>
    <div class="form-group" [class.has-error]="formModel.hasError('minlength','title')">
        <label for="productTitle">商品名稱:</label>
        <input formControlName="title" type="text" id="productTitle" placeholder="商品名稱" class="form-control">
        <span class="help-block" [class.hidden]="!formModel.hasError('minlength','title')">
            請至少輸入三個字
        </span>
    </div>
    <div class="form-group" [class.has-error]="formModel.hasError('positiveNumber','price')">
        <label for="productPrice">商品價格:</label>
        <input formControlName="price" type="number" id="productPrice" placeholder="商品價格" class="form-control">
        <span class="help-block" [class.hidden]="!formModel.hasError('positiveNumber','price')">
            請輸入正數
        </span>
    </div>
    <div class="form-group">
        <label for="productCategory">商品類別:</label>
        <select formControlName="category" id="productCategory" class="form-control">
            <option value="-1">全部分類</option>
            <option *ngFor="let category of categories" [value]="category">{{category}}</option>
        </select>
    </div>
    <div class="form-group">
        <button type="submit" class="btn btn-primary btn-block">搜索</button>
    </div>
</form>
import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators,FormControl } from '@angular/forms';
import { ProductService } from '../share/product.service';

@Component({
  selector: 'app-search',
  templateUrl: './search.component.html',
  styleUrls: ['./search.component.scss']
})
export class SearchComponent implements OnInit {

    formModel:FormGroup;

    categories: string[];

  constructor(private productService:ProductService) {
    let fb = new FormBuilder();
    this.formModel = fb.group({
        title:['',Validators.minLength(3)], //最少不少於3個字符
        price:[null,this.positiveNumberValidator], //不能為負數
        category:['-1'] //默認值為-1 --全部分類
    })
  }

  ngOnInit() {
      this.categories = this.productService.getAllCategories();
  }

  positiveNumberValidator(control: FormControl):any{
      if(!control.value){//如果輸入為空則返回空,相當於去空格
          return null;
      }
      let price = parseInt(control.value);

      if(price>0){ // 如果大於0不顯示錯誤信息
          return null;
      }else{  // 不大於0則顯示錯誤信息
          return {positiveNumber:true};
      }
  }
//如果驗證通過的話就把表單對應的值打印到控制台
  onSearch(){
      if(this.formModel.valid){
          console.log(this.formModel.value);
      }
  }

}

productService.ts 在服務里聲明返回類別方法

getAllCategories():string[]{
     return ["電子產品","硬件設備","圖書"];
   }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM