成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

使用ng2-admin搭建成熟可靠的后臺(tái)系統(tǒng) -- ng2-admin(四)

HtmlCssJs / 2107人閱讀

摘要:使用搭建成熟可靠的后臺(tái)系統(tǒng)四完善動(dòng)態(tài)表單組件添加正則驗(yàn)證添加錯(cuò)誤提示添加正則驗(yàn)證先來(lái)設(shè)置一些錯(cuò)誤提示,以及添加正則驗(yàn)證上一章可能遺留了部分路徑錯(cuò)誤,可以自行調(diào)整郵箱格式不正確請(qǐng)選擇這里是提供的一些正則

使用ng2-admin搭建成熟可靠的后臺(tái)系統(tǒng) -- ng2-admin(四) 完善動(dòng)態(tài)表單組件

添加正則驗(yàn)證

添加錯(cuò)誤提示

添加正則驗(yàn)證

先來(lái)設(shè)置一些錯(cuò)誤提示,以及添加正則驗(yàn)證(上一章可能遺留了部分路徑錯(cuò)誤,可以自行調(diào)整)
user-add.service.ts

import { Injectable } from "@angular/core";

import {
  QuestionBase,
  InputQuestion,
  SelectQuestion
} from "../../../../theme/components/dynamic-form-components/dynamic-form-base";

import { regExp } from "./../../../api/universal/regExp";

@Injectable()
export class UserAddService {
  getQuestions() {
    let questions: QuestionBase[] = [
      new InputQuestion({
        key: "firstName",
        label: "First name",
        value: "Bombasto",
        required: true,
        order: 1
      }),

      new InputQuestion({
        key: "emailAddress",
        label: "Email",
        type: "email",
        required: true,
        reg: regExp.email,
        prompt: "郵箱格式不正確",
        order: 2
      }),

      new SelectQuestion({
        key: "brave",
        label: "Bravery Rating",
        value: "",
        options: [
          { key: "請(qǐng)選擇", value: "" },
          { key: "Solid", value: "solid" },
          { key: "Great", value: "great" },
          { key: "Good", value: "good" },
          { key: "Unproven", value: "unproven" }
        ],
        required: true,
        order: 3
      })
    ];

    return questions.sort((a, b) => a.order - b.order);
  }
}

pages/api/universal/regExp.ts 這里是提供的一些正則

export const regExp = {
  number: /^d{1,6}$/,

  tel: /^(+86)?(s)?(d{1,4}-)?d{5,11}$/,

  phone: /^1[34578]d{9}$/,

  email: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/,

  text: /^[a-zA-Zu4e00-u9fa5]{2,9}/,

  name: /^[a-zA-Zu4e00-u9fa5]{2,9}/,

  file: /[2-9]{1,2}/,

  password: /^(?=.*?[A-Za-z]+)(?=.*?[0-9]+)(?=.*?[A-Za-z]).{6,16}$/,

  strongPassword: /^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-ZW_]+$)(?![a-z0-9]+$)(?![a-zW_]+$)(?![0-9W_]+$)[a-zA-Z0-9W_]{6,16}$/,  //要求大小寫(xiě)字母數(shù)字特殊符號(hào)四選三

  approvalStatus: /(2|3)/,
};
添加錯(cuò)誤提示
在驗(yàn)證無(wú)法通過(guò)時(shí),用戶不清楚自己未通過(guò)驗(yàn)證的選項(xiàng),所以現(xiàn)在需要加入錯(cuò)誤提示,友好的提示用戶。

添加一些樣式

dynamic-form.component.ts 添加

import "style-loader!./dynamic-fom-components.component.scss";

dynamic-fom-components.component.scss

$errorColor: #fa758e;

.form-container {
  display: flex;
  justify-content: flex-start;
  align-items: center;
  label {
    width: 10%;
    margin-right: 20px;
    i {
      color: $errorColor;
      margin-right: 5px;
    }
  }
  .form-control {
    width: 25%;
  }
  .prompt-error {
    color: $errorColor;
    margin-left: 20px;
  }
}

添加默認(rèn)的錯(cuò)誤提示

question-base.ts

this.prompt = options.prompt || "該項(xiàng)為必填/選項(xiàng)";

添加錯(cuò)誤提示

我們使用的是響應(yīng)式表單組成的動(dòng)態(tài)表單,所以對(duì)應(yīng)的 FormControl 應(yīng)該有以下幾個(gè)屬性可以幫助我們添加提示

valid 是否驗(yàn)證通過(guò)

touched 是否操作過(guò)

value 控件的值

現(xiàn)在來(lái)為控件添加提示樣式

先為 QuestionControlService 添加一個(gè)公開(kāi)的方法,用于設(shè)置 setter

question-control.service.ts

...
export class QuestionControlService {
    ...
    public getControlProperty(): void {
      Object.defineProperty(this, "isValid", {
        get() {
          return this.form.controls[this.question.key].valid;
        }
      });

      Object.defineProperty(this, "isTouched", {
        get() {
          return this.form.controls[this.question.key].touched;
        }
      });
    }
}

這里是將用戶表單中 FormControl 的 valid 和 touched 屬性設(shè)置為 getter, 以便實(shí)時(shí)更新?tīng)顟B(tài)。

現(xiàn)在來(lái)為 InputTextboxComponent 注入這幾個(gè) getter

input-textbox.component.ts

export class InputTextboxComponent {
  ...
  constructor(private qcs: QuestionControlService) {
    qcs.getControlProperty.call(this, null);
  }
}

然后需要在 html 中添加一些規(guī)則, 來(lái)顯示這些錯(cuò)誤提示

input-textbox.component.html

{{question.prompt}}

這樣就大功告成,以下是實(shí)際效果圖

當(dāng)驗(yàn)證不通過(guò)時(shí):

錯(cuò)誤提示出現(xiàn),輸入框有紅色線框環(huán)繞,且提交按鈕為置灰狀態(tài)

當(dāng)驗(yàn)證通過(guò)時(shí):

所有選項(xiàng)有正確提示,且表單可提交

讀者可自行完成 InputSelectComponent 的錯(cuò)誤提示驗(yàn)證

下章將會(huì)講解如何提交一個(gè)表單,基本的增刪改查,將會(huì)使用到 httpClient.

(此章以及此章前,代碼都提交在 ng2-admin 的 development 分支上,在未來(lái)會(huì)分開(kāi)分支,方便讀者練習(xí))

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/90608.html

相關(guān)文章

  • 使用ng2-admin搭建成熟可靠后臺(tái)系統(tǒng) -- ng2-admin(三)

    摘要:使用搭建成熟可靠的后臺(tái)系統(tǒng)三完善動(dòng)態(tài)表單添加樣式。下一章會(huì)講解,一個(gè)集成的服務(wù),來(lái)完成我們的提交,在將來(lái)的篇章里會(huì)在我們的組件中加入使其變得更加靈活。 使用ng2-admin搭建成熟可靠的后臺(tái)系統(tǒng) -- ng2-admin(三) 完善動(dòng)態(tài)表單 添加樣式。 抽離組件。 添加組件樣式 上一篇文章創(chuàng)建了兩個(gè),組件,現(xiàn)在使用bootstrap來(lái)給他們添加一些樣式 首先需要一個(gè)公用的 s...

    張憲坤 評(píng)論0 收藏0
  • 使用ng2-admin搭建成熟可靠后臺(tái)系統(tǒng) -- ng2-admin(二)

    摘要:使用搭建成熟可靠的后臺(tái)系統(tǒng)二構(gòu)建動(dòng)態(tài)表單構(gòu)建一個(gè)動(dòng)態(tài)表單,動(dòng)態(tài)生成控件,驗(yàn)證規(guī)則?,F(xiàn)在來(lái)創(chuàng)建它的子組件從上面的組件可以看出,未來(lái)需要添加組件時(shí),只需要添加一種類(lèi)型,可以用決定顯示哪種類(lèi)型的問(wèn)題。 使用ng2-admin搭建成熟可靠的后臺(tái)系統(tǒng) -- ng2-admin(二) 1.構(gòu)建動(dòng)態(tài)表單 構(gòu)建一個(gè)動(dòng)態(tài)表單,動(dòng)態(tài)生成控件,驗(yàn)證規(guī)則。 創(chuàng)建一個(gè)input組件,一個(gè)select組件 將...

    FleyX 評(píng)論0 收藏0
  • 使用ng2-admin搭建成熟可靠后臺(tái)系統(tǒng) -- ng2-admin(六)

    摘要:注意在配置完成后,需要重新啟動(dòng)項(xiàng)目使配置生效。每一行的內(nèi)容,由數(shù)據(jù)內(nèi)容決定,例如有三條數(shù)據(jù),應(yīng)顯示三行數(shù)據(jù),數(shù)據(jù)由組件自身請(qǐng)求獲取,所以應(yīng)該有一個(gè)自身的屬性用于承載數(shù)據(jù)。注意這里將換成了,所以組件的也需要替換,否則會(huì)報(bào)錯(cuò)。 使用ng2-admin搭建成熟可靠的后臺(tái)系統(tǒng) -- ng2-admin(六) 完善動(dòng)態(tài)表單組件 先來(lái)張本章節(jié)最終效果圖showImg(https://segmen...

    bingo 評(píng)論0 收藏0
  • 使用ng2-admin搭建成熟可靠后臺(tái)系統(tǒng) -- ng2-admin(五)

    摘要:創(chuàng)建一個(gè)工具類(lèi),負(fù)責(zé)提供以及完成拼接參數(shù)的工作。根據(jù)我們的配置,來(lái)創(chuàng)建這個(gè)文件。因?yàn)槭潜韱翁峤唬晕覀冃陆ㄒ粋€(gè)服務(wù),由它來(lái)完成表單提交的最后一步。 使用ng2-admin搭建成熟可靠的后臺(tái)系統(tǒng) -- ng2-admin(五) 完善動(dòng)態(tài)表單組件 升級(jí)Angular 4.1 -> 4.3 添加 json-server 模擬數(shù)據(jù) 創(chuàng)建自己的 http 完成一次表單提交 升級(jí)Angu...

    MiracleWong 評(píng)論0 收藏0
  • 手游開(kāi)發(fā)如何選擇后端服務(wù)

    摘要:云函數(shù)是萬(wàn)金油為實(shí)現(xiàn)用戶游戲數(shù)據(jù)存儲(chǔ)和每日任務(wù)分發(fā),我們最先用了存儲(chǔ)服務(wù)和云引擎。不過(guò)我們并沒(méi)有用提供的來(lái)直接調(diào)用存儲(chǔ)服務(wù),而是選擇用調(diào)用云引擎里面的云函數(shù),然后通過(guò)云函數(shù)調(diào)用存儲(chǔ)服務(wù)來(lái)實(shí)現(xiàn)相應(yīng)的邏輯。 【 玩轉(zhuǎn) LeanCloud 】開(kāi)發(fā)者投稿分享: 作者:趙天澤 作為一個(gè)通過(guò) LeanCloud 入門(mén)后端開(kāi)發(fā)的小白,一年多的開(kāi)發(fā)歷程讓我收獲滿滿。多個(gè)項(xiàng)目也在 LeanCloud 可...

    codecook 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<