JavaScript

超轻量级php框架startmvc

详解VUE自定义组件中用.sync修饰符与v-model的区别

更新时间:2020-07-14 06:42:02 作者:startmvc
.sync修饰组件<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>vue-03<

.sync修饰组件


<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <title>vue-03</title>
 <!-- 引入Vue -->
 <link href="https://cdn.bootcss.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="external nofollow" rel="external nofollow" rel="stylesheet">
 <script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
</head>

<body>

 <div class="container" style="margin-top: 12px;">
 <div id="demo" class="row">
 {{ say }}
 <br />
 <my-input :value.sync="say"></my-input>
 </div>
 </div>


 <script>
 new Vue({
 el: '#demo',
 data: {
 say: "123"
 },
 components: {
 "my-input": {
 props: ['value'],
 template: "<div><input v-bind:value='value' v-on:input='change1' />{{value}}</div>",
 watch: {
 value: function(newValue, oldValue) {
 alert('子组件value新旧值' + newValue + '/' + oldValue);
 //this.$emit('update:value', newValue)
 }

 },
 methods: {
 change1: function(e) {
 var v = e.target.value
 this.$emit('update:value', v)
 },

 }
 }
 },
 watch: {
 say: function(n, o) {
 alert('父组件新旧值' + n + '-' + o)
 }
 },
 methods: {

 }
 })
 </script>
</body>

v-model修饰组件


<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <title>vue-10</title>
 <!-- 引入Vue -->
 <link href="https://cdn.bootcss.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="external nofollow" rel="external nofollow" rel="stylesheet">
 <script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
</head>

<body>

 <div class="container" style="margin-top: 12px;">
 <div id="demo" class="row">
 {{ say }}
 <br />
 <my-input v-model="say"></my-input>
 </div>
 </div>


 <script>
 new Vue({
 el: '#demo',
 data: {
 say: "123"
 },
 components: {
 "my-input": {
 props: ['value'],
 template: "<div><input v-bind:value='value' v-on:input='change' />{{value}}</div>",
 watch: {
 value: function(newValue, oldValue) {
 alert('子组件value新旧值' + newValue + '/' + oldValue);
 //this.$emit('update:value', newValue)
 }

 },
 methods: {
 change: function(e) {
 this.$emit('input', e.target.value)
 }
 }
 }
 }
 })
 </script>
</body>

区别只能自己慢慢体会,个人感觉 .sync用法灵活,而v-model只能接受prop名为为value的值.

两者都需要手动触发$emit方法.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

VUE .sync修饰符 VUE v-model .sync修饰符 v-model