当前位置: 首页 > news >正文

攀枝花三线建设网站陕西找人做网站多少钱

攀枝花三线建设网站,陕西找人做网站多少钱,共振设计公司官网,网站上的代码网页怎么做的在 Vue3 中,组件之间的通信是构建应用程序的关键 1. 父组件向子组件传递数据 (Props)「父组件:」「子组件:」 2. 子组件向父组件传递数据 (Emit)「父组件:」「子组件:」 3. 兄弟组件通信 (Mitt)「发送事件的组件:」「接收事件的组件:」 4. 透传 Attributes ($attrs)「父组件:」…

在 Vue3 中,组件之间的通信是构建应用程序的关键

  • 1. 父组件向子组件传递数据 (Props)
    • 「父组件:」
    • 「子组件:」
  • 2. 子组件向父组件传递数据 (Emit)
    • 「父组件:」
    • 「子组件:」
  • 3. 兄弟组件通信 (Mitt)
    • 「发送事件的组件:」
    • 「接收事件的组件:」
  • 4. 透传 Attributes ($attrs)
    • 「父组件:」
    • 「子组件:」
  • 5. 模板引用 (Refs)
    • 「父组件:」
    • 「子组件:」
  • 6. 双向绑定 (v-model)
    • 「父组件:」
    • 「子组件:」
  • 7. 依赖注入 (Provide/Inject)
    • 「祖先组件:」
    • 「子孙组件:」
  • 8. 路由传参
    • 「通过 query 传参:」
    • 「通过 params 传参:」
    • 「通过 router-link 里面的 to 传参:」
  • 9. Vuex 状态管理
    • store/index.js
    • 组件中使用
  • 10. Pinia 状态管理
    • store.js
    • 组件中使用
  • 11. 浏览器存储
  • 12. Window 对象
  • 13. 全局属性
  • 总结:

1. 父组件向子组件传递数据 (Props)

这是最基本也是最常用的通信方式。父组件通过属性向子组件传递数据。

「父组件:」

<template><child :name="name"></child>
</template><script setup>
import { ref } from 'vue'
import Child from './Child.vue'
const name = ref('小明')
</script>

「子组件:」

<template><div>{{ props.name }}</div>
</template><script setup>
const props = defineProps({name: {type: String,default: '',},
})
</script>

2. 子组件向父组件传递数据 (Emit)

子组件可以通过触发事件的方式向父组件传递数据。

「父组件:」

<template><child @greet="handleGreet"></child>
</template><script setup>
import { ref } from 'vue'
import Child from './Child.vue'
const handleGreet = (message) => {console.log(message) // 输出: "来自子组件的问候"
}
</script>

「子组件:」

<template><button @click="handleClick">点击我</button>
</template><script setup>
import { ref, defineEmits } from 'vue'
const message = ref('来自子组件的问候')
const emits = defineEmits(['greet'])
const handleClick = () => {emits('greet', message.value)
}
</script>

3. 兄弟组件通信 (Mitt)

对于兄弟组件之间的通信,我们可以使用第三方库 mitt 来实现一个简单的事件总线。首先,安装 mitt:

npm install --save mitt

然后,在 main.js 中全局配置:

import { createApp } from 'vue'
import mitt from 'mitt'
import App from './App.vue'
const app = createApp(App)
app.config.globalProperties.$bus = mitt()
app.mount('#app')

「发送事件的组件:」

<script setup>
import { getCurrentInstance } from 'vue'
const { proxy } = getCurrentInstance()
const sendMessage = () => {proxy.$bus.emit('myEvent', '你好,兄弟')
}
</script>

「接收事件的组件:」

<script setup>
import { onMounted, getCurrentInstance } from 'vue'
const { proxy } = getCurrentInstance()
onMounted(() => {proxy.$bus.on('myEvent', (message) => {console.log(message) // 输出: "你好,兄弟"})
})
</script>

4. 透传 Attributes ($attrs)

$attrs 包含了父组件传递给子组件的所有属性,除了那些已经被 props 或 emits 声明的。

「父组件:」

<template><child name="小明" age="18" hobby="篮球"></child>
</template>

「子组件:」

<script setup>
import { useAttrs } from 'vue'
const attrs = useAttrs()
console.log(attrs) // { age: "18", hobby: "篮球" }
</script>

5. 模板引用 (Refs)

通过 ref,父组件可以直接访问子组件的属性和方法。

「父组件:」

<template><child ref="childRef"></child><button @click="callChildMethod">调用子组件方法</button>
</template><script setup>
import { ref } from 'vue'
import Child from './Child.vue'
const childRef = ref(null)
const callChildMethod = () => {childRef.value.someMethod()
}
</script>

「子组件:」

<script setup>
import { defineExpose } from 'vue'
const someMethod = () => {console.log('子组件方法被调用了')
}
defineExpose({someMethod,
})
</script>

6. 双向绑定 (v-model)

v-model 提供了一种简洁的方式来实现父子组件之间的双向数据绑定。

「父组件:」

<template><child v-model:name="name"></child>
</template><script setup>
import { ref } from 'vue'
import Child from './Child.vue'
const name = ref('小明')
</script>

「子组件:」

<template><input :value="name" @input="updateName" />
</template><script setup>
import { defineProps, defineEmits } from 'vue'
const props = defineProps(['name'])
const emit = defineEmits(['update:name'])
const updateName = (e) => {emit('update:name', e.target.value)
}
</script>

7. 依赖注入 (Provide/Inject)

provide 和 inject 允许祖先组件向所有子孙组件传递数据,而不需要通过每一层组件手动传递。

「祖先组件:」

<script setup>
import { provide, ref } from 'vue'
const themeColor = ref('blue')
provide('theme', themeColor)
</script>

「子孙组件:」

<script setup>
import { inject } from 'vue'
const theme = inject('theme')
console.log(theme.value) // 'blue'
</script>

8. 路由传参

Vue Router 提供了多种方式在路由之间传递参数。

「通过 query 传参:」

import { useRouter } from 'vue-router'
const router = useRouter()
router.push({ path: '/user', query: { id: 123 } })// 在目标组件中
import { useRoute } from 'vue-router'
const route = useRoute()
console.log(route.query.id) // 123

「通过 params 传参:」

同上:query=>params

「通过 router-link 里面的 to 传参:」

<router-link to="/father/son/传入的参数">父亲组件<router-link>
<router-link to="path: '/father/son', query: { title: title }">父亲组<router-link>

9. Vuex 状态管理

Vuex 是 Vue 的官方状态管理库,适用于大型应用。

store/index.js

import { createStore } from 'vuex'
export default createStore({state: {count: 0,},mutations: {increment(state) {state.count++},},
})

组件中使用

import { useStore } from 'vuex'
const store = useStore()
console.log(store.state.count)
store.commit('increment')

10. Pinia 状态管理

Pinia 是新一代的 Vue 状态管理库,提供更简单的 API 和更好的 TypeScript 支持。

store.js

import { defineStore } from 'pinia'export const useCounterStore = defineStore('counter', {state: () => ({ count: 0 }),actions: {increment() {this.count++},},
})

组件中使用

import { useCounterStore } from '@/store'
const counter = useCounterStore()
console.log(counter.count)
counter.increment()

11. 浏览器存储

localStorage 和 sessionStorage 可以用于在不同页面或组件之间共享数据。

// localStorage存储数据
localStorage.setItem('user', JSON.stringify({ name: '小明', age: 18 }))
// localStorage读取数据
const user = JSON.parse(localStorage.getItem('user'))// sessionStorage 存储数据
sessionStorage .setItem('user', JSON.stringify({ name: '小明', age: 18 }))
// sessionStorage 读取数据
const user = JSON.parse(sessionStorage .getItem('user'))

12. Window 对象

虽然不推荐,但在某些场景下,可以使用 window 对象在全局范围内共享数据。

// 设置全局数据
window.globalData = { message: '全局消息' }// 在任何地方使用
console.log(window.globalData.message)

13. 全局属性

Vue 3 提供了 app.config.globalProperties 来替代 Vue 2 中的 Vue.prototype,用于添加全局可用的属性。

// main.js
const app = createApp(App)
app.config.globalProperties.$http = axios// 在组件中使用
import { getCurrentInstance } from 'vue'
const { proxy } = getCurrentInstance()
proxy.$http.get('/api/data')

总结:

总结这 13 种方法涵盖了 Vue 3 中几乎所有的组件通信场景。根据你的具体需求和应用规模,选择最合适的通信方式。好的组件设计能够简化通信,提高代码的可维护性。

http://www.yayakq.cn/news/391440/

相关文章:

  • 免费游戏打开就能玩济南网站优化推广公司
  • 德州网站建设德州网站建设asp编程
  • 个人网站怎么备案可以做哪些微信 公众号导入wordpress
  • 惠州开发做商城网站建设哪家好婚纱影楼网站建设
  • 化工设计网站网站建设公司58
  • iis网站开发需要哪些配置wordpress 过期时间
  • 企业网站建设情况如何设计与制作网页
  • 网站建设尺寸软件开发流程文档模板
  • 房地产广告设计网站驻马店建设局网站
  • 网站建设多少钱 知乎做健身类小程序的网站
  • 诸暨哪些公司可以制作网站网站建设衤金手指花总十四
  • 网站建设除了中企动力四川省住房和建设厅官方网站
  • 做宣传页的软件是什么优化工作流程
  • 宿迁网站seo网站服务器要多少钱
  • 轻应用网站模板.name后缀的网站
  • 杭州网站seo推广软件开发培训课程咨询
  • 深圳网站建设推进那种做任务的网站叫什么
  • 网站开发流程ppt用手机制作app工具
  • wordpress加水印插件优化是什么意思?
  • 唐山网站建设推广婚礼策划网站模板中文
  • 腾讯云 网站备案西安网站建设和推广公司
  • 怎样进行公司网站建设网站联系我们的地图怎么做
  • 手机网站建设推广方案ppt不良网站正能量免费下载
  • 喜欢做木工 网站用友公司能不能做网站建设
  • 特价手机网站建设网站后台插件
  • iis网站目录权限推广公司怎么做
  • 网站开发选什么职位wordpress开发登录插件
  • 比较有名的网站建设公司wordpress管理员与编辑可见
  • 使用asp.net制作网站的整体过程wordpress google 字体 360
  • 宿州官方网站建设域名租赁网站