文章目录
- props
- 组合式组件 使用<script setup \>
- 组合式组件 没有使用 <script setup\>
- 选项式组件 this
- emits
- 组合式组件 使用<script setup \>
- 组合式组件 没有使用 <script setup\>
- 选项式组件 this
- v-model 组件数据绑定
- 单个model
- 多个model
- 实现 model 修饰符
props
组合式组件 使用<script setup >
<script setup>const props = defineProps({title: String,}) console.log(props.title)
</script>
<template><span>{{title}}</span>
</template>
组合式组件 没有使用 <script setup>
<script>export default{props: ['title'],setup(props){console.log(props.title);}}
</script>
选项式组件 this
<script>export default {props: ['foo'],created() {console.log(this.foo)}}
</script>
emits
组合式组件 使用<script setup >
<script setup>import {ref} from 'vue'const formValue = ref({})const emit = defineEmits({submit(payload: { email: string, password: string }) {if (email && password) {return true} else {console.warn('Invalid submit event payload!')return false}}})function buttonClick() {emit('submit', formValue.value)}
</script>
<template><button @click="emit('submit', formValue)">提交</button >
</template>
组合式组件 没有使用 <script setup>
<script>export default{emits: ['inFocus', 'submit'],setup(props, ctx) {ctx.emit('submit')}}
</script>
选项式组件 this
<script>export default {data: ()=>{return {formValue: {}}},emits: {click: null, submit: ({ email, password }) => {if (email && password) {return true} else {console.warn('Invalid submit event payload!')return false}}},methods: {submit() {this.$emit('submit',this.formValue)}},}
</script>
<template><button @click="$emit('submit', formValue)">提交</button >
</template>
v-model 组件数据绑定
单个model
<Child v-model="countModel" />
<script setup>const model= defineModel()function buttonClick() {model.value++}
</script>
<template><input v-model="model" /><div>Parent bound v-model is: {{ model }}</div>
</template>
多个model
<Child v-model:first-name="first"v-model:last-name="last"
/>
<script setup>const firstName = defineModel('firstName')const lastName = defineModel('lastName')
</script>
实现 model 修饰符
<Child v-model.capitalize="myText" />
<script setup>const [model, modifiers]= defineModel({set(value){if(modifiers.capitalize){return value.charAt(0).toUpperCase() + value.slice(1)}else{return value}}})
</script>
<template><input type="text" v-model="model" />
</template>