Legendary

李洋的学习笔记


组件间通信

<h2>父子、兄弟间组件通信综合</h2> <pre><code>&lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt; &lt;meta http-equiv="X-UA-Compatible" content="ie=edge"&gt; &lt;title&gt;Document&lt;/title&gt; &lt;style&gt; .red { color: red; } &lt;/style&gt; &lt;/head&gt; &lt;body&gt; &lt;div id="app"&gt; &lt;p&gt;根组件F:&lt;button&gt;按钮F&lt;/button&gt;F:&lt;span class="red"&gt;{{f}}&lt;/span&gt;,A:&lt;span class="red"&gt;{{a}}&lt;/span&gt;,B:&lt;span class="red"&gt;{{b}}&lt;/span&gt;&lt;/p&gt; &lt;!-- 1.接收父组件传来的数据::son="father" --&gt; &lt;!-- 三、将自定义事件挂载到子组件上:@自定义事件名="父组件方法" --&gt; &lt;childa :ff="f" :bf="b" @a="geta"&gt;&lt;/childa&gt; &lt;childb :ff="f" :af="a" @b="getb"&gt;&lt;/childb&gt; &lt;/div&gt; &lt;/body&gt; &lt;/html&gt; &lt;script src="./node_modules/vue/dist/vue.min.js"&gt;&lt;/script&gt; &lt;script&gt; window.onload = function () { // 声明组件 let childa = { // 3.将接收到的数据渲染到组件上:ff template: `&lt;div&gt; &lt;p&gt;子组件a:&lt;button @click="senda()"&gt;按钮a&lt;/button&gt;F:&lt;span class="red"&gt;{{ff}}&lt;/span&gt;,A:&lt;span class="red"&gt;{{a}}&lt;/span&gt;,B:&lt;span class="red"&gt;{{bf}}&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;`, props: ['ff', 'bf'],// 2.用props接收,值为接收参数的数组 data() { return { a: 'A', // 一、自定义方法(this.$emit())传递子组件数据:data()函数的返回对象内添加自定义方法 senda() { // 二、自定义方法:this.$emit(event,param),event:挂载到组件上的自定义事件;param:传递到父组件的数据参数 this.$emit('a', this.a) } } } } let childb = { template: `&lt;div&gt; &lt;p&gt;子组件b:&lt;button @click="sendb()"&gt;按钮b&lt;/button&gt;F:&lt;span class="red"&gt;{{ff}}&lt;/span&gt;,A:&lt;span class="red"&gt;{{af}}&lt;/span&gt;,B:&lt;span class="red"&gt;{{b}}&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;`, props: ['ff', 'af'],// // (五)、兄弟之间传输:自——&gt;父——&gt;兄 data() { return { b: 'B', sendb() { this.$emit('b', this.b) } } } } new Vue({ el: '#app', components: { childa, childb },// 挂载组件 data() { return { f: 'F', a: ' ', b: ' ' } }, methods: { // 四、响应子组件数据传输的函数 geta(parm) { this.a = parm }, getb(parm) { this.b = parm } } }) } &lt;/script&gt;</code></pre> <h3>一、父传子</h3> <ol> <li>接收父组件传来的数据:<code>&lt;my-tag :xx="a"&gt;&lt;/my-tag&gt;</code></li> <li>用props接收,值为接收参数的数组: <code>let myTag = {...props:['xx'],...}</code></li> <li>将接收到的数据渲染到组件上:<code>let myTag = {...template:"...{{xx}}...",...}</code></li> </ol> <h3>二、子传父</h3> <ol> <li>自定义方法(this.$emit())传递子组件数据:子组件data()函数的返回对象内添加自定义方法senddata()</li> <li>自定义方法senddata():this.$emit(event,param),event:挂载到组件上的自定义事件;param:传递到父组件的数据参数 <code>this.$emit('dataevent',data)</code></li> <li>将自定义事件挂载到子组件上:@自定义事件名=&quot;父组件方法&quot; <code>&lt;my-tag @dataevent="getdata"&gt;&lt;/my-tag&gt;</code></li> <li>父组件创建响应子组件数据传输的函数:<code>methods:{getdata(data){this.data.xx = data.xx}}</code></li> </ol> <h3>三、自传兄</h3> <ol> <li>自传父,父传兄</li> <li>Vuex:拿个store把所有数据装起来,各组件按需分配</li> <li>事件总线(eventbus)</li> </ol>

页面列表

ITEM_HTML