1.普通v-model实现双向绑定的使用
<input type="text" v-model="message">
vue在解释v-model的时候会做一个转化工作,实质是下面这样:
<div id="app"> <input type="text" :value="message" @input="message = $event.target.value"> <span>{{message}}</span> </div> <script> var app2 = new Vue({ el:'#app', data:{ message:"Hello Vue" } }); </script>
2.封装组件标签上使用v-model完成双向绑定
仿照v-model的实现方法,在自定义组件标签上实现v-model功能
子组件:
<template> <div> <!--1 el-下拉选择框 --> <el-select v-model="content" @change="handleInput" placeholder="请选择"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled"> </el-option> </el-select> <!--2 原生下拉框 --> <!-- <select name="" id="" v-model="content" @change="handleInput"> <option value="11">11</option> <option value="22">22</option> <option value="33">33</option> </select> --> <!--3 el-输入框 --> <!-- <el-input v-model="content" @input="handleInput" placeholder="请输入内容"></el-input> --> <!--4 原生输入框 --> <!-- <input v-model="content" @input="handleInput" /> --> </div> </template> <script> export default { name: "HelloWorld", prop: ['newValue'], model: { event: 'input-change', prop: 'newValue' }, data() { return { options: [{ value: '选项1', label: '黄金糕' }, { value: '选项2', label: '双皮奶', disabled: true }, { value: '选项3', label: '蚵仔煎' }, { value: '选项4', label: '龙须面' }, { value: '选项5', label: '北京烤鸭' }], content: this.newValue } }, methods: { handleInput(e) { this.$emit('input-change', this.content) } } }; </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped> </style>
父组件调用
<HelloWorld v-model="name" />更新了:{{ name }} data(){ return{ name:'', } }
结果
原生html 和element框架里的组件都可以实现
我是马丁的车夫,欢迎转发收藏!