ZBLOG

vue components

Vue Components 全面指南

Vue 组件是构建 Vue 应用程序的核心单元,以下是关于 Vue 组件的详细说明:

1. 组件基础概念

组件定义方式

// 单文件组件 (SFC - .vue文件)
<template>
  <div class="example">{{ msg }}</div>
</template>

<script>
export default {
  name: 'ExampleComponent',
  data() {
    return {
      msg: 'Hello Vue!'
    }
  }
}
</script>

<style scoped>
.example {
  color: red;
}
</style>

Props (属性传递)

props: {
  // 基础类型检查
  propA: Number,
  
  // 多个可能的类型
  propB: [String, Number],
  
  // required + type check
  propC: {
    type: String,
    required: true
  },
  
  // default value + validator
  propD: {
    type: Number,
    default: function() {
      return Math.random()
    },
    validator(value) {
      return value >=0 && value <=1
    }
}

Emits (事件发射)

emits: ['submit'], // Vue3显式声明emits

methods: {
 handleClick() { this.$emit('submit', payload) } 
}

// Vue3 setup语法糖写法:
const emit = defineEmits(['submit'])
function onClick() { emit('submit', payload) }

v-model双向绑定实现

<!-- CustomInput.vue -->
<input :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" />

<!-- Parent usage -->
<CustomInput v-model="searchText" />
<!-- Vue3支持多v-model -->
<CustomInput v-model:text="text" v-model:pagination="page" />

Provide/Inject深度通信模式

// Ancestor提供数据(Vue3)
import { provide } from 'vue'

setup() { provide('location', 'North Pole') }

// Descendant获取数据(Vue3)
import { inject } from 'vue'

setup() { const location = inject('location', '默认值') }

Composition API (组合式API)示例

import { ref, computed } from 'vue'

export default {
 setup(props) {
   const count = ref(0)
   
   const double = computed(() => count.value *2 )
   
   function increment() { count.value++ }
   
   return { count, double, increment }
}  
}

Teleport传送门功能(Vue3特有)

<teleport to="#modals">
 <div class="modal">Modal内容会传送到body下的#modals节点</div>  
</teleport>

Suspense异步组件(Vue3特有)

<Suspense>  
 <template #default><AsyncComponent /></template>  
 <template #fallback>Loading...</template>  
</Suspense>

这些特性覆盖了Vue2和Vue3中组件的核心用法,包括数据流管理、组合逻辑复用和高级功能等。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=24101

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?