zoukankan      html  css  js  c++  java
  • Vue3手册译稿

    基础用法

    你可以通过v-model指令创建与文本框、多行文本框以及选择框等表单输入组件的双向绑定,它会自动根据输入组件不同使用正确的绑定方式。虽然有点神奇的,但v-model本质上是用户输入控件更新数据的语法糖,对一些边界情况进行处理。

    [warning]提示
    v-model会忽略表单单控件初始化的value,checked,selected属性。它总会将当前活动实例数据当成数据源。你应该在组件的javascript代码的data选项中定义这些初始值。

    v-model内部针对不同的控件使用不同的属性和不同的事件调用方法:

    • texttextarea使用value属性,事件用input
    • checkbox,radiobutton使用checked属性,事件用change
    • select使用props传递value,事件用change

    [notice]多国语言(中文、日文、韩文)等,在你可能注意到在输入过程中v-model是不更新数据的。如果你想跟踪这种更新,使用input事件监听绑定value来代替v-model。(个人感觉没有场景需要这种监听吧!)

    文本框(text)

    <input v-model="message" placeholder="请输入内容" />
    <p>你输入的内容是: {{ message }}</p>
    

    多行文本框(textarea)

    <span>多行文本框输入的内容是:</span>
    <p style="white-space: pre-line;">{{ message }}</p>
    <br />
    <textarea v-model="message" placeholder="输入多行内容"></textarea>
    

    textarea中间插入文字不会工作,应该使用v-model代替

    <!-- 错误 -->
    <textarea>{{ text }}</textarea>
    
    <!-- 正确 -->
    <textarea v-model="text"></textarea>
    

    复选框(checkbox)

    <input type="checkbox" id="checkbox" v-model="checked" />
    <label for="checkbox">{{ checked }}</label>
    

    多个checkbox绑定到一个数组上:

    <div id="v-model-multiple-checkboxes">
      <input type="checkbox" id="jack" value="Jack" v-model="checkedNames" />
      <label for="jack">Jack</label>
      <input type="checkbox" id="john" value="John" v-model="checkedNames" />
      <label for="john">John</label>
      <input type="checkbox" id="mike" value="Mike" v-model="checkedNames" />
      <label for="mike">Mike</label>
      <br />
      <span>Checked names: {{ checkedNames }}</span>
    </div>
    
    Vue.createApp({
      data() {
        return {
          checkedNames: []
        }
      }
    }).mount('#v-model-multiple-checkboxes')
    

    单选框(radio)

    <div id="v-model-radiobutton">
      <input type="radio" id="one" value="One" v-model="picked" />
      <label for="one">One</label>
      <br />
      <input type="radio" id="two" value="Two" v-model="picked" />
      <label for="two">Two</label>
      <br />
      <span>Picked: {{ picked }}</span>
    </div>
    
    Vue.createApp({
      data() {
        return {
          picked: ''
        }
      }
    }).mount('#v-model-radiobutton')
    

    选择框(select)

    单选选择框:

    <div id="v-model-select" class="demo">
      <select v-model="selected">
        <option disabled value="">Please select one</option>
        <option>A</option>
        <option>B</option>
        <option>C</option>
      </select>
      <span>Selected: {{ selected }}</span>
    </div>
    
    Vue.createApp({
      data() {
        return {
          selected: ''
        }
      }
    }).mount('#v-model-select')
    

    [info]如果v-model与数组任何一项都没有匹配成功,<select>标签会渲染成unselected状态。IOS环境下会导致默认第一个选项是空的,因为这种情况下IOS不支持改变事件。因此推荐初始一个不可选择的空值选项。
    多选选择框(绑定到数组上):

    <select v-model="selected" multiple>
      <option>A</option>
      <option>B</option>
      <option>C</option>
    </select>
    <br />
    <span>Selected: {{ selected }}</span>
    
    Vue.createApp({
      data() {
        return {
          selected: ''
        }
      }
    }).mount('#v-model-select')
    

    使用v-for动态渲染选项:

    <div id="v-model-select-dynamic" class="demo">
      <select v-model="selected">
        <option v-for="option in options" :value="option.value">
          {{ option.text }}
        </option>
      </select>
      <span>Selected: {{ selected }}</span>
    </div>
    
    Vue.createApp({
      data() {
        return {
          selected: 'A',
          options: [
            { text: 'One', value: 'A' },
            { text: 'Two', value: 'B' },
            { text: 'Three', value: 'C' }
          ]
        }
      }
    }).mount('#v-model-select-dynamic')
    

    绑定值

    对于radio,checkbox,select选项,v-model绑定值默认为字符串(或checkbox使用布尔值):

    <!-- `picked` 值是一个字符串,当选择后赋值`a` -->
    <input type="radio" v-model="picked" value="a" />
    
    <!-- `toggle` 的值是真或假-->
    <input type="checkbox" v-model="toggle" />
    
    <!-- `selected` 首项选中后赋值`abc` -->
    <select v-model="selected">
      <option value="abc">ABC</option>
    </select>
    

    有时候我们希望为当前实例控件绑定动态的值,我们可以通过v-bind实现。另外使用v-bind允许我们绑定一个非字符串的值。

    checkbox

    <input type="checkbox" v-model="toggle" true-value="yes" false-value="no" />
    
    // checked:
    vm.toggle === 'yes'
    // unchecked:
    vm.toggle === 'no'
    

    [info]true-value,false-value并不影响控件的输入value属性,因为浏览器并不会把未选中的选项在表单中提交。如果想确保两个值只会提交一个(yes 或 no),应该使用radio控件。

    radio

    <input type="radio" v-model="pick" v-bind:value="a" />
    
    // when checked:
    vm.pick === vm.a
    

    select 选项

    <select v-model="selected">
      <!-- 内联对象 -->
      <option :value="{ number: 123 }">123</option>
    </select>
    
    // selected:
    typeof vm.selected // => 'object'
    vm.selected.number // => 123
    

    修饰符

    .layz

    默认v-model同步输入框内容变化同步更改数据(中日韩等输入法除外)。你可以添加.lazy修饰符替代同步更新为change事件之后。

    <!-- 在 "change" 更新而非 "input" -->
    <input v-model.lazy="msg" />
    

    .number

    如果你想将用户输入自动转换为数值型,在v-model添加添加.number修饰符管理用户输入:

    <input v-model.number="age" type="number" />
    

    有时这很有用,因为即使为文本框添加了type="number",仍然可能返回一个字符串。如果输入值可以转换为parseFloat(),将原值返回。

    .trim

    自动删除前后空格。

    <input v-model.trim="msg" />
    

    组件使用v-model

    [info]如果对组件不熟悉,请先跳过。

    HTML自带的组件经常满足不了实际需求,幸运的是Vue可以在可复用的自定文本框上使用v-model并拥有完整的自定义行为。查阅组件手册中自定义输入组件学习更多!

  • 相关阅读:
    IBM Lotus网站荟萃
    Lotus 深入浅出系列——前言(二)IBM Lotus开发人员的几个境界
    在IIS上配置和测试Perl脚本
    网站推广
    iTOP开发板MiniLinuxC程序调用shell命令
    iTOP4412开发板_驱动_adc驱动升级和测试例程
    最近想入手树莓派3来学习编程同学没有选择4412开发板吗?
    iTOP4412开发板串口转接小板的使用文档
    学习嵌入式4412开发板手把手配套视频_2000人群组在线交流
    电子医疗设备创新研发应该用i.MX6Q开发板吗?为医疗设备提供解决方案
  • 原文地址:https://www.cnblogs.com/zhouyu629/p/14502464.html
Copyright © 2011-2022 走看看