用vue.js组件模拟v-model指令实例方法

时间:2021-05-23

1、问题描述

在使用v-model指令实现输入框数据双向绑定,输入值时对应的这个变量的值也随着变化;但是这里不允许使用v-model,需要写一个组件实现v-model指令效果

<div id="user"> <input type="text" v-model="username"> <label>{{username}}</label></div> <script> let v = new Vue({ el:'#user', data:{ username:'zhangsan' } })</script>

2、实现源码

<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>Vue模拟v-model指令</title> <script src="../js/vue.js"></script> </head> <body> <div id="datas"> <input-model :value="num" @inputchange="num=arguments[0]"></input-model> <br> <span> {{num}} </span> </div> <script> Vue.component('input-model',{ template:`<input type="text" :svalue="cvalue" @input="updateInput">`, computed: { cvalue() { return this.svalue } }, props:['svalue'], methods: { updateInput: function(event){ let values = event.target.value this.$emit('inputchange',values) } } }); let v = new Vue({ el:'#datas', data: { num:'1' } }) </script> </body></html>

3、注意事项

(1)父组件中使用子组件,绑定的inputchange必须小写,不能使用inputChange;

(2)子组件中的cvalue和计算属性中的要保持一致;

(3)子组件中的@input和父组件中的@inputchange没有必然关系;

(4)this.$emit('inputchange',values)中的inputchange要和DOM元素中的input-model一致

(5)父组件将num值通过props属性传到子组件中;子组件通过$emit触发当前实例上的事件,将改变的值传给父组件

内容扩展:

vue.js指令v-model实现方法

V-MODEL 是VUE 的一个指令,在input 控件上使用时,可以实现双向绑定。

通过看文档,发现他不过是一个语法糖。

实际是通过下面的代码来实现的:

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><script type="text/javascript" src="vue/vue.js"></script></head><body><div id="app-6"><input :value="person.name" @input="person.name = $event.target.value"><input :value="person.age" @input="person.age =$event.target.value">{{person}}</div><script type="text/javascript">var app =new Vue({el: '#app-6',data:{person:{name:"ray",age:19}}})</script></body></html>

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章