A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© JoyZhang 中级黑马   /  2021-4-11 15:46  /  1679 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

## vue2中v-model的使用
> vue中v-model既可以使用在input框中,也可以使用在组件中,今天主要讨论在组件中使用
父组件代码
```
<template>
  <div class="parent">
    <!-- 这是子传父的写法 -->
    <child-component :value="pageTitle" @input="pageTitle = $event"></child-component>
    <!-- 这是v-model的简写 -->
    <child-component v-model="pageTitle"></child-component>
  </div>
</template>
<script>
import ChildComponent from './child-component'
export default {
  name: 'Parent',
  components: {
    ChildComponent
  },
  data() {
    return {
      pageTitle: 'hello vue'
    }
  }
}
</script>
```
子组件的写法
```
<template>
  <div class="child">
    <input type="text" :value="value" @input="$emit('input', $event.target.value)">
  </div>
</template>
<script>
export default {
  name: 'Child',
  props: ['value']
}
</script>
```
## vue2中.sync的使用
此时出现一个问题,如果我要传给子组件的值是多个怎么办?很显然v-model就无能为力了
1. 用法
```
父组件:
<text-document v-bind:title.sync="doc.title"></text-document>
子组件:
this.$emit('update:title', newTitle)
```
来我们看看上面的v-model如果改造成.sync

父组件
```
<template>
  <div class="parent">
    我是父组件
    <child-component :value.sync="pageTitle" :main.sync="pageMain"></child-component>
  </div>
</template>
<script>
import ChildComponent from './child-sync'
export default {
  name: 'Parent',
  components: {
    ChildComponent
  },
  data() {
    return {
      pageTitle: 'hello vue',
      pageMain: 'hello sync'
    }
  }
}
</script>
```
子组件
```
<template>
  <div class="child">
    <input type="text" :value="value" @input="$emit('update:value', $event.target.value)">
    <input type="text" :value="main" @input="$emit('update:main', $event.target.value)">
  </div>
</template>
<script>
export default {
  name: 'Child',
  props: ['value', 'main']
}
</script>
```
## vue3中v-model的使用
父组件
```
<template>
    <child-component v-model:title="pageTitle" v-model:main="pageMain"></child-component>
</template>
<script>
import ChildComponent from './child-components.vue'
export default {
  name: 'Parent',
  components: {
    ChildComponent
  },
  data() {
    return {
      pageTitle: 'hello vue',
      pageMain: 'hello sync'
    }
  }
}
</script>
```
子组件
```
<template>
  <div class="child">
    <input type="text" :value="title" @input="$emit('update:title', $event.target.value)">
    <input type="text" :value="main" @input="$emit('update:main', $event.target.value)">
  </div>
</template>
<script>
export default {
  name: 'Child',
  props: ['title', 'main']
}
</script>
```
## vue2 vs vue3
相同点:
1. 在父组件中v-model是同样的使用手法
不同点:
1. 子组件中vue2是`$emit('input', value)` vue3中 `$emit('update:value', value)`
2. vue2中的.sync`:value.sync="pageTitle"` 在vue3中全部用v-model替换`v-model:value="pageTitle"`




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马