<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Angular實現響應式表單

        來源:懂視網 責編:小采 時間:2020-11-27 22:33:18
        文檔

        Angular實現響應式表單

        Angular實現響應式表單:介紹 Angular 總共提供了 3 中表單實現方式,分別是:Template-driven Forms (模板驅動表單) 、 Reactive Forms (響應式表單) 、 Dynamic Forms (動態表單) 。本文只介紹響應式表單。 響應式表單是什么呢?其實跟我們以前用 JQuery 或者其他框
        推薦度:
        導讀Angular實現響應式表單:介紹 Angular 總共提供了 3 中表單實現方式,分別是:Template-driven Forms (模板驅動表單) 、 Reactive Forms (響應式表單) 、 Dynamic Forms (動態表單) 。本文只介紹響應式表單。 響應式表單是什么呢?其實跟我們以前用 JQuery 或者其他框

        介紹

        Angular 總共提供了 3 中表單實現方式,分別是:Template-driven Forms (模板驅動表單) 、 Reactive Forms (響應式表單) 、 Dynamic Forms (動態表單) 。本文只介紹響應式表單。

        響應式表單是什么呢?其實跟我們以前用 JQuery 或者其他框架實現的思路差不多,就是使用 HTML 顯示數據,然后通過定義一定的校驗器、校驗規則以及校驗提示語,通過事件觸發校驗后校驗不通過的顯示提示語,只不過用了 Angular,我們就使用 Angular 提供的語法來實現這個校驗過程。

        使用

        接下來我們通過代碼例子來介紹如何使用響應式表單。

        引入響應式表單模塊

        在我們要使用響應式表單的那個模塊里面引入響應式表單模塊,比如我們在文章模塊中使用響應式表單,我們就要在 imports 中添加 ReactiveFormsModule。代碼如下

        @NgModule({
         imports: [
         RouterModule,
         RouterModule.forChild(articleRoutes),
         SharedModule,
         ReactiveFormsModule,
         NgbModule.forRoot()
         ],
         declarations: [
         HomeComponent,
         DetailComponent,
         CommentComponent,
         CommentViewComponent
         ],
         providers: [
         HomeService,
         DetailService,
         CommentService
         ]
        })
        export class ArticleModule { }
        

        編寫校驗器代碼

        首先我們這里的表單有 3 個字段,分別是 nickname、email、content; nickname 添加必填校驗器,email 添加必填和郵箱格式校驗器,content添加必填校驗器。

        首先在 CommentComponent 中注入 FormBuilder 對象,并添加 commentForm 表單組以及創建一個評論對象 comment。

        public commentForm: FormGroup;
        public comment: Comment = new Comment();
        
        constructor(private formBuilder: FormBuilder){}
        

        定義校驗器的提示語 validationMessages, formErrors 是在模板中顯示的提示語,提示語來自 validationMessages

        public formErrors = {
         "nickname": "",
         "email": "",
         "content": "",
         "formError": ""
        }
        
        public validationMessages = {
         "nickname": {
         "required": "昵稱不能為空",
         },
         "email": {
         "required": "郵箱不能為空",
         "pattern": "請輸入正確的郵箱地址"
         },
         "content": {
         "required": "內容不能為空"
         }
        }
        
        

        在組件啟動的函數中構造表單,這時候為每個字段添加了校驗器,并且綁定在什么時候觸發校驗,這里我們在每個值改變的時候觸發。

        ngOnInit(): void {
         this.buildForm();
        }
        
        private buildForm() {
         this.commentForm = this.formBuilder.group({
         "nickname":[
         this.comment.nickname,
         [
         Validators.required
         ]
         ],
         "email": [
         this.comment.email,
         [
         Validators.required,
         Validators.pattern("^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$")
         ]
         ],
         "content": [
         this.comment.content,
         [
         Validators.required
         ]
         ]
         });
         this.commentForm.valueChanges.subscribe(data => this.onValueChanged(data));
         this.onValueChanged();
        }
        
        

        onValueChanged() 方法實現了判斷是那個字段校驗不通過,然后將該字段的 validationMessages 提示語賦值給 formErrors,在模板那里有判斷如果 formErrors.email 等等字段不為空則顯示改內容,也即是校驗器的提示語

        onValueChanged(data?: any) {
         if (!this.commentForm) {
         return;
         }
         const form = this.commentForm;
         for (const field in this.formErrors) {
         this.formErrors[field] = '';
         const control = form.get(field);
         if (control && control.dirty && !control.valid) {
         const messages = this.validationMessages[field];
         for (const key in control.errors) {
         this.formErrors[field] += messages[key] + ' ';
         }
         }
         }
        
        }
        
        

        HTML 模板代碼

        我們要關注的是 [formGroup]=”commentForm”、novalidate、formControlName=”nickname”、以及 *ngIf=”formErrors.nickname” 這幾個點,并不是指具體的點,而是著重看這些語法的每一個地方,在你自己實現的時候需要根據你的代碼修改的。

        還有一個是 (ngSubmit)=”sendComment()” 定義了該表單點擊提交時調用的函數。

        <form [formGroup]="commentForm" (ngSubmit)="sendComment()" role="form" novalidate>
         <div class="control-group">
         <div class="form-group floating-label-form-group controls" [ngClass]="{'has-error': formErrors.nickname}">
         <label>{{ 'comment.nickname' | translate }}</label>
         <input formControlName="nickname" type="text" class="form-control" placeholder="{{ 'comment.nickname' | translate }}">
         <p *ngIf="formErrors.nickname" class="help-block text-danger">
         {{ formErrors.nickname }}
         </p>
         </div>
         </div>
         <div class="control-group" >
         <div class="form-group floating-label-form-group controls" [ngClass]="{'has-error': formErrors.email}">
         <label>{{ 'comment.email' | translate }}</label>
         <input formControlName="email" type="email" class="form-control" placeholder="{{ 'comment.email' | translate }}">
         <p *ngIf="formErrors.email" class="help-block text-danger">
         {{ formErrors.email }}
         </p>
         </div>
         </div>
         <div class="control-group">
         <div class="form-group floating-label-form-group controls" [ngClass]="{'has-error': formErrors.content}">
         <label>{{ 'comment.content' | translate }}</label>
         <textarea formControlName="content" rows="5" class="form-control" placeholder="{{ 'comment.content' | translate }}"></textarea>
         <p *ngIf="formErrors.content" class="help-block text-danger">
         {{ formErrors.content }}
         </p>
         </div>
         </div>
         <p *ngIf="formErrors.formError" class="help-block text-danger">
         {{ formErrors.formError }}
         </p>
         <br>
         <div id="success"></div>
         <div class="form-group">
         <button [disabled]="commentForm.invalid" type="submit" class="btn btn-secondary" >{{ 'comment.submit' | translate }}</button>
         </div>
        </form>
        
        

        GitHub 代碼

        參考文章

        Reactive Forms

        效果圖


        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Angular實現響應式表單

        Angular實現響應式表單:介紹 Angular 總共提供了 3 中表單實現方式,分別是:Template-driven Forms (模板驅動表單) 、 Reactive Forms (響應式表單) 、 Dynamic Forms (動態表單) 。本文只介紹響應式表單。 響應式表單是什么呢?其實跟我們以前用 JQuery 或者其他框
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲第一成年男人的天堂| 免费不卡中文字幕在线| 日本久久久久亚洲中字幕| 免费视频精品一区二区三区| a级亚洲片精品久久久久久久| 国产美女视频免费观看的网站 | 一个人免费播放在线视频看片| 免费大片在线观看网站| 免费毛片毛片网址| 国产精品亚洲精品日韩已方| 一级a性色生活片久久无少妇一级婬片免费放 | 国产gv天堂亚洲国产gv刚刚碰| 黄桃AV无码免费一区二区三区| 亚洲春色在线视频| 在线成人爽a毛片免费软件| 亚洲色av性色在线观无码| av免费不卡国产观看| 亚洲午夜成人精品无码色欲| 午夜色a大片在线观看免费| 日韩亚洲人成网站| 在线精品亚洲一区二区小说| 久9热免费精品视频在线观看| 亚洲欧洲国产精品久久| 大香人蕉免费视频75| 一级做a免费视频观看网站| 亚洲AV无码成人专区片在线观看 | 久久精品国产亚洲AV高清热| 日韩一区二区a片免费观看| 亚洲av无码一区二区三区天堂| 亚洲精品偷拍视频免费观看| 久久黄色免费网站| 亚洲欧美成人一区二区三区| 亚洲日韩精品无码专区网站 | 黄页网站在线观看免费| 国产亚洲免费的视频看| 国产在线a免费观看| 久青草视频在线观看免费| 亚洲午夜一区二区电影院| 亚洲人成人网站在线观看| 四虎最新永久免费视频| 未满十八私人高清免费影院|