首頁 > web前端 > js教程 > 主體

Vue.js自訂事件的表單輸入元件方法

亚连
發布: 2018-05-31 16:32:54
原創
1507 人瀏覽過

下面我就為大家分享一篇Vue.js自訂事件的表單輸入元件方法,具有很好的參考價值,希望對大家有幫助。

Vue.js使用自訂事件的表單輸入元件

自訂事件可以用來建立自訂的表單輸入元件,使用v-model 來進行數據雙向綁定。要牢記:

<input v-model="something">
登入後複製

這不過是以下範例的語法糖:

<input
 v-bind:value="something"
 v-on:input="something = $event.target.value">
登入後複製

所以在元件中使用時,它相當於下面的簡寫:

<custom-input
 v-bind:value="something"
 v-on:input="something = arguments[0]">
</custom-input>
登入後複製

所以要讓元件的v-model 生效,它應該(從2.2.0 起是可配置的):

接受一個value prop

#在有新的值時觸發input 事件並將新值作為參數

我們來看一個非常簡單的貨幣輸入的自訂控制項:--在父元件中引用子元件模板時用綁定v- model資料:

<currency-input v-model="price"></currency-input>
登入後複製
Vue.component(&#39;currency-input&#39;, {
 template: &#39;\
  <span>\
   $\
   <input\
    ref="input"\
    v-bind:value="value"\
    v-on:input="updateValue($event.target.value)"\
   >\
  </span>\
 &#39;,
 props: [&#39;value&#39;],
 methods: {
  // 不是直接更新值,而是使用此方法来对输入值进行格式化和位数限制
  updateValue: function (value) {
   var formattedValue = value
    // 删除两侧的空格符
    .trim()
    // 保留 2 位小数
    .slice(
     0,
     value.indexOf(&#39;.&#39;) === -1
      ? value.length
      : value.indexOf(&#39;.&#39;) + 3
    )
   // 如果值尚不合规,则手动覆盖为合规的值
   if (formattedValue !== value) {
    this.$refs.input.value = formattedValue
   }
   // 通过 input 事件带出数值
   this.$emit(&#39;input&#39;, Number(formattedValue))
  }
 }
})
登入後複製

自訂元件的 v-model

2.2.0 新增

預設情況下,一個元件的v-model會使用value prop 和input 事件。但是諸如單選框、複選框之類的輸入類型可能把 value 用作了別的目的。 model 選項可以避免這樣的衝突:

Vue.component(&#39;my-checkbox&#39;, {
 model: {
  prop: &#39;checked&#39;,
  event: &#39;change&#39;
 },
 props: {
  checked: Boolean,
  // 这样就允许拿 `value` 这个 prop 做其它事了
  value: String
 },
 // ...
})
登入後複製
<my-checkbox v-model="foo" value="some value"></my-checkbox>
登入後複製

上述程式碼等價於:

<my-checkbox
 :checked="foo"
 @change="val => { foo = val }"
 value="some value">
</my-checkbox>
登入後複製

注意你還是需要明確宣告 checked 這個 prop。

上面是我整理給大家的,希望今後對大家有幫助。

相關文章:

淺談React高階元件

#vue-cli axios請求方式及跨網域處理問題

jQuery實作瀏覽器之間跳轉並傳遞參數功能【支援中文字元】

#

以上是Vue.js自訂事件的表單輸入元件方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!