美文网首页Web前端
Vue - 指令 - (v-model)

Vue - 指令 - (v-model)

作者: 廖马儿 | 来源:发表于2018-06-29 12:01 被阅读0次

    v-model
    预期:随着表单控件类型不同而不同。
    限制:

    <input>
    <select>
    <textarea>
    components
    

    修饰符:

    *   [`.lazy`](https://cn.vuejs.org/v2/guide/forms.html#lazy) - 取代 `input` 监听 `change` 事件
    *   [`.number`](https://cn.vuejs.org/v2/guide/forms.html#number) - 输入字符串转为数字
    *   [`.trim`](https://cn.vuejs.org/v2/guide/forms.html#trim) - 输入首尾空格过滤
    

    使用方法:
    在表单控件或者组件上创建双向绑定。细节请看下面的教程链接。

    参考:

    使用的地方:

    表单控件(<input>, <select>, <textarea>)
    组件(components) 
    

    双向绑定的实质:

    <input v-model="something">
    

    这不过是以下示例的语法糖:

    <input
      v-bind:value="something"
      v-on:input="something = $event.target.value">    # 这里的 $event.target.value 是指的js对象的property
    

    所以在组件中使用时,它相当于下面的简写:

    <custom-input
      v-bind:value="something"
      v-on:input="something = arguments[0]">
    </custom-input>
    

    所以要让组件的 v-model 生效,它应该 (从 2.2.0 起是可配置的):

    接受一个 value prop
    在有新的值时触发 input 事件并将新值作为参数
    

    我们来看一个非常简单的货币输入的自定义控件:

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

    5.自定义组件的 v-model

    默认情况下,一个组件的 v-model 会使用 value prop 和 input 事件。但是诸如单选框、复选框之类的输入类型可能把 value 用作了别的目的。model 选项可以避免这样的冲突:

    Vue.component('my-checkbox', {
      model: {
        prop: 'checked',
        event: 'change'
      },
      props: {
        checked: Boolean,
        // 这样就允许拿 `value` 这个 prop 做其它事了
        value: String
      },
      // ...
    })
    

    相关文章

      网友评论

        本文标题:Vue - 指令 - (v-model)

        本文链接:https://www.haomeiwen.com/subject/byrjzxtx.html