专栏首页前端之攻略Vue.js -表单控件绑定 原

Vue.js -表单控件绑定 原

基础用法 你可以用v-model指令在表单控件元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素,但v-model本质上不过是语法糖,它负责监听用户的输入事件以更新数据,并特别处理一些极端的例子,v-model 会忽略所有表单元素的value 、checked、selected特性的初始值。因为它会选择Vue实例数据来作为具体的值。你应该通过JavaScript在组件的data选项中声明初始值 文本

<body class="">
    <div id="example-1">
       <input type="text" v-model="message" placeholder="edit me">
       <p>{{message}}</p>
    </div>
    <script src="js/vue.js"></script>
    <script>
    var app = new Vue({
        el: "#example-1",
        data:{
            message:""
        }
    })
    </script>
</body>

多行文本

<body class="">
    <div id="example-1">
      <span>multiline message is:</span>
      <p style="white-space:pre-line">{{message}}</p>
      <textarea v-model="message" cols="30" rows="10" placeholder="add multiple lines"></textarea>
    </div>
    <script src="js/vue.js"></script>
    <script>
    var app = new Vue({
        el: "#example-1",
        data:{
            message:""
        }
    })
    </script>
</body>

//pre-line 合并空白符序列,但是保留换行符,意思是单词之间如果有多个空格,合并成一个空格,按回车键换行

在文本区域插值(<textarea></textarea>)并不生效,应用v-model来代替 ,即<textarea></textarea>不能使用{{message}这种形式

复选框 单个复选框,逻辑值

<body class="">
    <div id="example-1">
      <input type="checkbox" id="checkbox" v-model="checked">
      <label for="checkbox">{{checked}}</label>
    </div>
    <script src="js/vue.js"></script>
    <script>
    var app = new Vue({
        el: "#example-1",
        data:{
            checked:true
        }
    })
    </script>
</body>

多个复选框,绑定到同一个数组,并把选中的按列表显示出来例子

<body class="">
    <div id="example-1">
        <input type="checkbox" id="jack" value="jack" v-model="checkedNames">
        <label for="jack">jack</label>
        <input type="checkbox" id="join" value="join" v-model="checkedNames">
        <label for="join">join</label>
        <input type="checkbox" id="lily" value="lily" v-model="checkedNames">
        <label for="lily">lily</label>
        <ul>
            <li v-for="item in checkedNames">{{item}}</li>
        </ul>
    </div>
    <script src="js/vue.js"></script>
    <script>
    var app = new Vue({
        el: "#example-1",
        data: {
            checkedNames: []
        }
    })
    </script>
</body>

单选按钮

<body class="">
    <div id="example-1">
       <input type="radio" id="one" value="One" v-model="picked">
       <label for="one">One</label>
       <input type="radio" id="two" value="Two" v-model="picked">
       <label for="two">Two</label>
       <div>{{picked}}</div>
        
    </div>
    <script src="js/vue.js"></script>
    <script>
    var app = new Vue({
        el: "#example-1",
        data: {
            picked: "One"
        }
    })
    
    </script>
</body>

//选中时显示的是value的值,通过v-model 指向同一个picked,就表明这几个单选框是一组

选中列表 单选列表

<body class="">
    <div id="example-1">
      <select v-model="selected">
          <option value="" disabled>请选择</option>
          <option>A</option>
          <option>B</option>
          <option>C</option>
      </select>
      <div>选择了:{{ selected }}</div>
    </div>
    <script src="js/vue.js"></script>
    <script>
    var app = new Vue({
        el: "#example-1",
        data: {
            selected: ""
        }
    })
    //在下拉列表中,请选择的value属性设置为空,否则option初始化显示为空,其余的option的value属性不设置,也不能设置为空,因为显示的内容优先显示value的值而不是option的内容
    </script>
</body>

如果v-model表达初始的值不匹配任何选项(为空),select元素会以“未选中”的状态渲染,像以上提供的disabled选项是建议的做法

动态选项,用v-for渲染

<body class="">
    <div id="example-1">
        <select v-model="selected">
            <option v-for="option in options" v-bind:value="option.value">{{option.text}}</option>
        </select>
        <div>选择了:{{ selected }}</div>
    </div>
    <script src="js/vue.js"></script>
    <script>
    var app = new Vue({
        el: "#example-1",
        data: {
            selected: "A",
            options: [
                { text: "one", value: "A" },
                { text: "two", value: "B" },
                { text: "three", value: "C" },
            ]
        }
    })
    </script>
</body>

对于单选按钮,勾选框及选择列表选项,v-model绑定的value通常是静态字符串(对于复选框是逻辑值) <!-- 当选中时,`picked` 为字符串 "a" --> <input type="radio" v-model="picked" value="a">

<!-- `toggle` 为 true 或 false,单个的复选框toggle只能是true或者false,多个的话可以绑定到一个数组并分别设置value --> <input type="checkbox" v-model="toggle">

<!-- 当选中时,`selected` 为字符串 "abc" 如果option没有value属性 则`selected` 为字符串 "ABC"--> <select v-model="selected">   <option value="abc">ABC</option> </select>

但是有时我们想绑定value到Vue实例的一个动态属性上,这时可以用v-bind实现,并且这个属性的值可以不是字符串,而是表达式,

复选框   当选中复选框时显示的是"your selected"

<body class="">
    <div id="example-1">
       <input type="checkbox" v-model="toggle" v-bind:true-value="a" v-bind:false-value="b">
       <div>{{toggle}}</div>
    </div>
    <script src="js/vue.js"></script>
    <script>
    var app = new Vue({
        el: "#example-1",
        data: {
            toggle:"",
            a: "your selected",
            b: "not select"
        }
    })
    </script>
</body>

单选按钮

<body class="">
    <div id="example-1">
       <input type="radio" v-model="pick" v-bind:value="a" >
       <input type="radio" v-model="pick" v-bind:value="b" >
       <div>{{pick}}</div>
    </div>
    <script src="js/vue.js"></script>
    <script>
    var app = new Vue({
        el: "#example-1",
        data: {
            pick:"",
            a: "your selected a",
            b: "your selected b",
           
        }
    })
    </script>
</body>

选择列表设置

<body class="">
    <div id="example-1">
        <select v-model="selected">
            <option v-bind:value="{number:1234}">123</option>
        </select>
        <div>{{selected.number}}</div>
    </div>
    <script src="js/vue.js"></script>
    <script>
    var app = new Vue({
        el: "#example-1",
        data: {
            selected: "",
        }
    })
    </script>
</body>

修饰符 .lazy

默认情况下,v-model 在input事件中同步输入框的数据,但你可以添加一个修饰符lazy,从而转变为在change事件中同步,当输入完,点击其它地方

<body class="">
    <div id="example-1">
        <input v-model.lazy="msg">
        <div>{{msg}}</div>
    </div>
    <script src="js/vue.js"></script>
    <script>
    var app = new Vue({
        el: "#example-1",
        data: {
            msg: "",
        }
    })
    </script>
</body>

.number 如果想自动将用户输入值转为Number类型(如果原值的转换结果为NaN则返回原值),可以添加一个修饰符number给v-model来处理输入值 <input v-model.number="age" type="number">

.trim 如果要自动过滤用户输入的首尾空格,可以添加trim修饰符到v-model上过滤输入 <input v-model.trim="msg">

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • css position:static 的使用

    relative(相对定位) 对象不可层叠、不脱离文档流,参考自身静态位置通过top,bottom,left,right定位,并且可以通过z-index进行层次...

    tianyawhl
  • Vue.js-组件 原

    之前说过,我们可以通过以下方式创建一个Vue实例 new Vue({   el: '#some-element',   // 选项 })

    tianyawhl
  • 含有echart 图表的报表打印 原

    最近需要打印含有echart图表的报表,采用jqprint插件打印,直接用jqprint打印echart的图不显示,这里需要借助img 来实现

    tianyawhl
  • [jQuery学习系列一]1-选择器与DOM对象

    一枝花算不算浪漫
  • 网页html结构搭建方法总结

    windseek
  • css 使元素居中

    <div style="text-align:center;">居中显示</div>

    lin_zone
  • css实现未知宽度的正方形需求

    今天群里有哥们问了一下,百分比宽度的正方形如何用css实现。其实就是不定宽的正方形如何用css实现。 第一个方法利用图片的等比例缩放,用base64写一个1*1...

    练小习
  • css补充、JavaScript、Dom

    css补充: position: fixed:可以将标签固定在页面的某个位置 absolute+relative:通过两者的结合可以让标签在一个相对的位置 代码...

    coders
  • CSS实现垂直居中布局

    首先将<html>与<body>的高度设置为100%(为演示父元素不定宽高的效果),并清除<body>的默认样式

    WindrunnerMax
  • 基于Jsp和Servlet的简单项目

    链接:https://pan.baidu.com/s/1ylOi3PXFy6nwoOyVGVrBeg 提取码:yvsn

    时间静止不是简史

扫码关注云+社区

领取腾讯云代金券