<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
每一個元件中的變數和資料都是獨立的,如果別的元件想要存取另一個元件裡的資料該怎麼做?
可以採用父元件傳資料給子元件,還可以子元件傳資料給父元件。簡稱父傳子,子傳父。
下面詳細說說父元件是如何將資料傳給子元件的。
理論:如果一個元件A引入並使用了另一個元件B時,那麼元件A就是父元件,元件B就是子元件。
1.在父元件中引入子元件、註冊子元件、使用子元件
2.在父元件中的子元件標籤上自定義一個屬性 左邊是定義的名稱,右邊是父元件中的資料 例如
<MyCon :list="list" />
3.在子元件中用prpos接收父元件傳來的資料 例如:prpos:['list'] 注意這裡面的名稱必須要和父元件
定義的名稱一致才能可以。
在父元件中的子元件標籤上自定義一個屬性
<template> <div> <h1>父元件傳子元件</h1> <!-- 使用元件 自定義屬性 --> <MyCon :name="name" :age="age" /> </div> </template> <script> // 引入元件 --> 建立元件 --> 使用元件 // 引入元件 import MyCon from "./MyCon.vue"; export default { // 建立元件 components: { MyCon }, // 資料 data() { return { name: "張三", age: 38, }; }, }; </script>
在子元件中用prpos接收父元件傳來的資料
<template> <div> <h2>子元件</h2> // 直接在標籤中使用 <p>{{ name }} {{ age }}</p> <button @click="fn">點選修改props的值</button> </div> </template> <script> export default { // 子元件接收父元件傳來的資料 props: ["name", "age"], methods: { fn() { this.name = "傻逼譚磊"; this.age = 20 }, }, }; </script>
<template> <div style="border: 1px solid #ccc; margin: 5px; padding: 5px"> <h1>父元件</h1> <!-- 1. 父傳。自定義屬性 --> <MyProduct v-for="item in list" :key="item.id" :price="item.proprice" :info="item.info" :goodname="item.proname" /> </div> </template> <script> // 匯入->註冊->使用 import MyProduct from "./MyProduct.vue"; export default { data() { return { list: [ { id: 1, proname: "超級好吃的棒棒糖", proprice: 18.8, info: "開業大酬賓, 全場8折", }, { id: 2, proname: "超級好吃的大雞腿", proprice: 34.2, info: "好吃不膩, 快來買啊", }, { id: 3, proname: "超級無敵的冰激凌", proprice: 14.2, info: "炎熱的夏天, 來個冰激凌了", }, ], }; }, components: { MyProduct }, }; </script> <style> </style>
<template> <div style="border: 1px solid #ccc; margin: 5px; padding: 5px"> <h2>標題: {{ goodname }}</h2> <p>價格: {{ price }}元</p> <p>{{ info }}</p> </div> </template> <script> export default { props: ["goodname", "price", "info"], }; </script> <style> </style>
1.在父元件中引入子元件、註冊子元件、使用子元件
2.在父元件的子元件標籤上加一個事件監聽 例如: <MyCon @abc="fn" />
3.在子元件中觸發這個自定義的監聽事件。例如:this.$emit("abc",引數)
在父元件的子元件標籤上加一個事件監聽 用形參接收資料
<template> <div> <h1>父元件</h1> <!-- 1.新增事件監聽 --> <!-- 當子元件發生了abc事件要執行fn函數 --> <MyCon @abc="fn" /> </div> </template> <script> // 引入子元件 import MyCon from "./MyCon.vue"; export default { methods: { // 形參接收 fn(obj) { // 列印檢視有沒有獲取到 console.log("fn發生了abc事件", obj); }, }, components: { MyCon }, }; </script>
在子元件中觸發這個自定義的監聽事件
<template> <div> <h2>子元件</h2> <button @click="ConFn">子傳父</button> </div> </template> <script> export default { methods: { ConFn() { console.log("子元件click"); // 2.觸發abc事件 this.$emit("abc", { name: "吊毛譚磊" }); }, }, }; </script>
<template> <div style="border: 1px solid #ccc; margin: 5px; padding: 5px"> <h1>父元件</h1> <!-- 1. 父傳。自定義屬性 --> <!-- 新增自定義事件 --> <MyProduct v-for="(item, idx) in list" :idx="idx" :key="item.id" :price="item.proprice" :info="item.info" :goodname="item.proname" @pdd="fn" /> </div> </template> <script> // 匯入->註冊->使用 import MyProduct from "./MyProduct.vue"; export default { data() { return { list: [ { id: 1, proname: "超級好吃的棒棒糖", proprice: 18.8, info: "開業大酬賓, 全場8折", }, { id: 2, proname: "超級好吃的大雞腿", proprice: 34.2, info: "好吃不膩, 快來買啊", }, { id: 3, proname: "超級無敵的冰激凌", proprice: 14.2, info: "炎熱的夏天, 來個冰激凌了", }, ], }; }, components: { MyProduct }, methods: { fn(obj) { console.log("父元件,收到了pdd事件", obj); // 計算砍了幾元 相減 再進行重新賦值 this.list[obj.idx].proprice -= obj.ran; }, }, }; </script> <style> </style>
<template> <div style="border: 1px solid #ccc; margin: 5px; padding: 5px"> <h2>標題: {{ goodname }}</h2> <p>價格: {{ price }}元</p> <p>{{ info }}</p> <button @click="bargain">隨機砍價</button> </div> </template> <script> export default { // 子接收 props: ["goodname", "price", "info", "idx"], methods: { bargain() { // 亂數字 const ran = Math.ceil(Math.random() * 10); // 觸發自定義事件 // 為了知道具體是哪個商品要減少價格,所以要回傳idx下標 this.$emit("pdd", { idx: this.idx, ran }); }, }, }; </script> <style> </style>
到此這篇關於vue元件是如何實現元件通訊的文章就介紹到這了,更多相關vue實現元件通訊內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45