站长资讯网
最全最丰富的资讯网站

一文详解vue怎么实现v-model(附代码示例)

本篇文章给大家带来了关于vue的相关知识,其中主要给大家介绍了我们为什么使用v-model?用vue怎么实现v-model的,感兴趣的朋友一起来看一下吧,希望对大家有帮助。

一文详解vue怎么实现v-model(附代码示例)

  • 为什么使用v-model? v-model作为双向绑定指令也是vue两大核心功能之一,使用非常方便,提高前端开发效率。在view层,model层相互需要数据交互,即可使用v-model。
  • v-model的原理简单描述

v-model主要提供了两个功能,view层输入值影响data的属性值,data属性值发生改变会更新view层的数值变化。

其核心就是,一方面modal层通过defineProperty来劫持每个属性,一旦监听到变化通过相关的页面元素更新。另一方面通过编译模板文件,为控件的v-model绑定input事件,从而页面输入能实时更新相关data属性值。

  • v-model是什么 v-model就是vue的双向绑定的指令,能将页面上控件输入的值同步更新到相关绑定的data属性,也会在更新data绑定属性时候,更新页面上输入控件的值。

vue2.0实现方法

  • 父组件

<template>   <div id="app">     {{username}} <br/>     <my-input type="text" v-model="username"></my-input>   </div> </template>  <script> import myinput from './components/myinput' export default {   name: 'App',   components:{       myinput   },   data(){     return {       username:''     }   }  } </script>
登录后复制

  • myinput.vue:

<template>     <div class="my-input">         <input type="text" class="my-input__inner" @input="handleInput"/>     </div> </template>  <script>     export default {         name: "myinput",         props:{             value:{ //获取父组件的数据value                 type:String,                 default:''             }         },         methods:{             handleInput(e){                 this.$emit('input',e.target.value) //触发父组件的input事件             }         }     } </script>
登录后复制

最常见的还有一种事控制模态框的展示与关闭,我们也可以用v-model 以element 的 el-dialog组件为例子

  • App.vue

<template>     <div>         <kmDialog             v-model="showDialog"         >         <el-button @click="show">点我</el-button>     </div> </template> <script>     import kmDialog from 'KmDialog.vue'     export default {         components: {             KmDialog         }         data () {             return {                 showDialog: false             }         },         methods: {             show() {                 this.showDialog = true             }         }     } </script>
登录后复制

  • KmDialog.vue

<template>     <el-dialog         :title="isEdit ? '编辑设备' : '新增设备'"         :visible.sync="value"         width="40%"         @close="cancel"       >         <span>这是一段信息</span>     </el-dialog> </template> <script>     export default {         props: {             value: {                 default: false,                 type: Boolean             }         },         methods: {             cancel() {                 this.$emit('input', false)             }         }     } </script>
登录后复制

推荐学习:《vue.js视频教程》

赞(0)
分享到: 更多 (0)
网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号