亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

說說如何在Vue.js中實現數字輸入組件的方法

發布時間:2020-08-30 16:34:41 來源:腳本之家 閱讀:202 作者:deniro 欄目:web開發

我們對普通輸入框進行擴展,實現一個可快捷輸入數字組件。

首先制定規則:

  • 只能輸入數字。
  • 設計兩個快捷按鈕,可直接在當前值的基礎上增 1 或者減 1。
  • 數字輸入組件可設置初始值、最大值與最小值。

接著,規劃好 API。一個 Vue.js 組件最重要的 3 個部分就是 props、events 以及 slot,我們需要定義這三個部分的命名以及業務規則。這個組件比較簡單,所以我們只用到  props 與 events。

1 基礎版

html:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>數字輸入組件</title>
</head>
<body>
<div id="app">
  <number-input v-model="value" :min="0" :max="6"></number-input>
</div>
<script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
<script src="number.js"></script>
<script>
  var app = new Vue({
    el: '#app',
    data: {
      value: 3
    }
  });
</script>
</body>
</html>

這里,我們使用了 v-model,雙向綁定了 value。

number.js:

/**
 * 是否為數字
 * @param val
 * @returns {boolean}
 */
function isNum(val) {
  return (/^[0-9]*$/).test(val);
}

/**
 * 數字輸入組件
 */
Vue.component('number-input', {
  template: '\
  <div class="number-input">\
    <input \
      type="text"\
      :value="currentVal"\
      @change="change">\
    <button\
      @click="down"\
      :disabled="currentVal<=min">-</button>\
    <button\
      @click="up"\
      :disabled="currentVal >=max">+</button>\
  </div>',
  props: {//校驗
    //最大值
    max: {
      type: Number,
      default: Infinity
    },
    //最小值
    min: {
      type: Number,
      default: -Infinity
    },
    //初始值
    value: {
      type: Number,
      default: 0
    }
  },
  data: function () {
    return {
      currentVal: this.value
    }
  },
  watch: {
    currentVal: function (val) {
      console.log("currentVal:" + this.currentVal);
      this.$emit('input',val);
    },
    value: function (val) {//更新 currentVal
      this.update(val);
    }
  },
  methods: {
    /**
     * 更新
     * @param val
     */
    update: function (val) {
      //讓輸入的值在限定范圍內
      if (val > this.max) {
        val = this.max;
      }
      if (val < this.min) {
        val = this.min
      }
      this.currentVal = val;
    },
    /**
     * 減少
     */
    down: function () {
      if (this.currentVal <= this.min) {
        return;
      }
      this.currentVal -= 1;
    },
    /**
     * 增長
     */
    up: function () {
      if (this.currentVal >= this.max) {
        return;
      }
      this.currentVal += 1;
    },
    /**
     * 如果輸入的值,
     * @param event
     */
    change: function (event) {
      var val = event.target.value.trim();//獲取輸入值

      if (isNum(val)) {//賦值 currentVal
        val = Number(val);
        this.currentVal = val;

        //超出限定范圍時,規整
        var max = this.max;
        var min = this.min;
        if (val > max) {
          this.currentVal = max;
        } else if (val < min) {
          this.currentVal = min;
        }
      } else {//還原為 currentVal
        event.target.value = this.currentVal;
      }
    }
  },
  mounted: function () {
    //對初始值進行范圍限定
    this.update(this.value);
  }
});

這里,我們專門定義了一個 number.js,用于定義數字輸入組件。
在 number.js 中,我們做了如下工作:

  1. 利用正則表達式 ,定義了一個判斷 “是否為數字” 的函數。
  2. 在模板定義中,我們定義了一個輸入框以及兩個按鈕,首先在 input 中綁定了 currentVal 數據以及原生的 change 事件。接著,定義了遞增與遞減按鈕,每個按鈕都綁定了相應的事件,還綁定了 disabled 屬性,這樣當輸入的值超出范圍時,按鈕就會置灰不可用。
  3. 在定義的 change() 方法中,先獲取輸入值,然后判斷是否為數字。如果是數字,則賦值給 currentVal;如果不是數字,則還原為 currentVal,這樣可以保證組件的內容始終是數字。
  4. 接著在 props 中,對每一個參數(最大值、最小值、初始值)定義了相應的校驗規則。這樣就可以在父組件中初始化這個數字輸入組件啦O(∩_∩)O~
  5. 因為 Vue.js 組件時單向數據流,所以不能在組件內部修改之前在 props 中定義的 value。我們可以在 data 函數中,聲明一個 currentVal,并把  props 中定義的 value 值賦給它。這樣就實現了組件初始化時,引用父組件中的值的工作。
  6. 為了當父組件修改了輸入值,也要更新子組件中的 currentVal 的功能,我們需要用到 watch 屬性。 watch 屬性用于監聽某個 prop 或者 data,當它們發生變化時,會觸發定義在 watch 中的函數。這里我們監聽了 currentVal 與 value,監聽了 currentVal 是為了將來當內部更新了 currentVal 的場景時,可以同步到 Value,這里起核心作用的是監聽 value 值。為了讓輸入的值在限定范圍內,這里封裝了一個 update() 函數。
  7. watch 中的監聽函數,有兩個入參,第一個是新值,第二個是舊值。這里只用到新值。因為監聽函數中的 this ,指向的是當前組件實例,所以可以直接調用定義在 methods 中的函數。
  8. 為了在組件初始化時,對初始值進行范圍限定,這里在 mounted 掛載函數中,也調用了 update() 函數。

效果:

說說如何在Vue.js中實現數字輸入組件的方法

2 按鍵支持

當輸入框獲得焦點時,按下“向上鍵”時,增長;按下“向上鍵”時,減少。

這可以利用按鍵修飾符來實現,我們修改示例中的組件模板:

...
 <input 
      type="text"
      :value="currentVal"
      @change="change"
      @keyup.up="up"
      @keyup.down="down">
...

Vue.js 定義按鍵別名有這些:

  • .enter
  • .tab
  • .delete(捕獲“刪除”和“退格”鍵)
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right

效果:

說說如何在Vue.js中實現數字輸入組件的方法

3 控制步伐

新增一個步伐屬性,增長或者減少以步伐值為變化量。之前的示例,步伐為 1。

首先在 props 中,定義一個步伐屬性:

//步伐
step: {
  type: Number,
  default: 1
}

然后在增長與減少函數中,使用步伐屬性做為變化量:

/**
 * 減少
 */
down: function () {
  if (this.currentVal <= this.min) {
    return;
  }
  this.currentVal -= this.step;
},
/**
 * 增長
 */
up: function () {
  if (this.currentVal >= this.max) {
    return;
  }
  this.currentVal += this.step;
},

最后為組件重新配置參數:

<number-input v-model="value" :min="0" :max="50" :step="5"></number-input>

效果:

說說如何在Vue.js中實現數字輸入組件的方法

本文示例代碼

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武胜县| 广昌县| 巴林左旗| 南丹县| 瓮安县| 南澳县| 元谋县| 鄂伦春自治旗| 龙江县| 武清区| 永州市| 四子王旗| 西贡区| 九江市| 堆龙德庆县| 石台县| 洛川县| 喀什市| 宁津县| 定南县| 江津市| 茌平县| 遂平县| 临澧县| 万载县| 正定县| 安多县| 平邑县| 杭锦旗| 平顺县| 玉林市| 新昌县| 行唐县| 清新县| 宝清县| 台湾省| 池州市| 彭山县| 北安市| 鹤峰县| 墨玉县|