丹哥 發表於 2021-1-8 13:58:00

uni-app中组件传值(父传子,子传父)

<h2>一、父组件向子组件传值</h2>
<p>通过props来实现,子组件通过props来接收父组件传过来的值!</p>
<p>1、逻辑梳理</p>
<h3>父组件中:</h3>
<p><br>第一步:引入子组件;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> import sonShow from '@/component/son.vue';</pre>
</div>
<p>第二步:在components中对子组件进行注册;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 0, 1)">components: {
</span><span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 0, 0, 1)">    sonShow
</span><span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">4</span>               </pre>
</div>
<p>第三步:以标签的形式载入;通过数据绑定的形式进行传值~</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> &lt;son-show :<span style="color: rgba(255, 0, 0, 1)">reciveUserInfo</span>="userInfo"&gt;&lt;/son-show&gt;</pre>
</div>
<p>&nbsp;</p>
<h3>子组件中:</h3>
<p>&nbsp;通过props接收父组件中传过来的值;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(255, 0, 0, 1)">props</span>:["reciveUserInfo"],</pre>
</div>
<p>&nbsp;</p>
<p><strong>2、代码展示</strong></p>
<p><span style="color: rgba(255, 0, 0, 1)">父组件index.vue</span></p>
<p><span style="color: rgba(0, 0, 0, 1)"></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> &lt;template&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span>   &lt;view class="content"&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span>         &lt;son-show <span style="color: rgba(255, 0, 0, 1)">:reciveUserInfo="userInfo"</span>&gt;&lt;/son-show&gt;
<span style="color: rgba(0, 128, 128, 1)"> 4</span>   &lt;/view&gt;
<span style="color: rgba(0, 128, 128, 1)"> 5</span> &lt;/template&gt;
<span style="color: rgba(0, 128, 128, 1)"> 6</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> &lt;script&gt;
<span style="color: rgba(0, 128, 128, 1)"> 8</span>   import sonShow from '../../component/son.vue'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>   export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">      components: {
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">            sonShow
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">      data() {
</span><span style="color: rgba(0, 128, 128, 1)">14</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">                userInfo: [{
</span><span style="color: rgba(0, 128, 128, 1)">16</span>                         "userName": "kaliwo"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">17</span>                         "age": "19"
<span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">                  },
</span><span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 0, 1)">                  {
</span><span style="color: rgba(0, 128, 128, 1)">20</span>                         "userName": "lihuahua"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">21</span>                         "age": "39"
<span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 0, 0, 1)">                ]
</span><span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">27</span> &lt;/script&gt;</pre>
</div>
<p><span style="color: rgba(255, 0, 0, 1)">子组件son.vue</span></p>
<p><span style="color: rgba(0, 0, 0, 1)"></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> &lt;template&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span>   &lt;view class=""&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span>         &lt;blockv-<span style="color: rgba(0, 0, 255, 1)">for</span>="(item,index) in reciveUserInfo" :key="index"&gt;
<span style="color: rgba(0, 128, 128, 1)"> 4</span>             &lt;view class="mesg"&gt;
<span style="color: rgba(0, 128, 128, 1)"> 5</span>               &lt;text&gt;{{item.userName}}&lt;/text&gt;
<span style="color: rgba(0, 128, 128, 1)"> 6</span>               &lt;text&gt;{{item.age}}&lt;/text&gt;
<span style="color: rgba(0, 128, 128, 1)"> 7</span>             &lt;/view&gt;
<span style="color: rgba(0, 128, 128, 1)"> 8</span>         &lt;/block&gt;
<span style="color: rgba(0, 128, 128, 1)"> 9</span>   &lt;/view&gt;
<span style="color: rgba(0, 128, 128, 1)">10</span> &lt;/template&gt;
<span style="color: rgba(0, 128, 128, 1)">11</span>
<span style="color: rgba(0, 128, 128, 1)">12</span> &lt;script&gt;
<span style="color: rgba(0, 128, 128, 1)">13</span>   export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)">14</span>       <span style="color: rgba(255, 0, 0, 1)">props:["reciveUserInfo"],
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">16</span> &lt;/script&gt;
<span style="color: rgba(0, 128, 128, 1)">17</span> &lt;style&gt;
<span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">    .mesg{
</span><span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 0, 1)">      display: flex;
</span><span style="color: rgba(0, 128, 128, 1)">20</span>         flex-<span style="color: rgba(0, 0, 0, 1)">direction: column;
</span><span style="color: rgba(0, 128, 128, 1)">21</span>         align-<span style="color: rgba(0, 0, 0, 1)">items: center;
</span><span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">23</span> &lt;/style&gt;
<span style="color: rgba(0, 128, 128, 1)">24</span>
<span style="color: rgba(0, 128, 128, 1)">25</span></pre>
</div>
<p><strong>3、结果</strong></p>
<p><strong><img src="https://img2020.cnblogs.com/blog/1884450/202101/1884450-20210108133657234-1877759992.png" alt="" loading="lazy"></strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>四、说明</strong></p>
<p>对于一些详情页,比如有时我们需要点赞数量+1,-1的效果;但是,由于子组件不能改变父组件的值,所以直接操作从父组件接收的值进行更改是没有效果的!就像如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span>      let list =<span style="color: rgba(0, 0, 0, 1)"> that.reciveUserInfo;
</span><span style="color: rgba(0, 128, 128, 1)">2</span>         <span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">var</span> i <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> list){
</span><span style="color: rgba(0, 128, 128, 1)">3</span>         let tempAge = list.age + 1<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">4</span>         list.age =<span style="color: rgba(0, 0, 0, 1)"> tempAge;
</span><span style="color: rgba(0, 128, 128, 1)">5</span>         that.reciveUserInfo =<span style="color: rgba(0, 0, 0, 1)"> list;
</span><span style="color: rgba(0, 128, 128, 1)">6</span>   }</pre>
</div>
<p><span style="color: rgba(0, 0, 0, 1)">年龄还是没有改变。所以应该怎么做了?</span></p>
<p><strong><span style="color: rgba(255, 0, 0, 1)">把从父组件接收到的值reciveUserInfo赋给一个新的变量mesgShow,对这个新的变量进行操作,然后用对齐进行渲染即可!</span></strong></p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> let list =<span style="color: rgba(0, 0, 0, 1)"> that.reciveUserInfo;
</span><span style="color: rgba(0, 128, 128, 1)">2</span>   <span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">var</span> i <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> list){
</span><span style="color: rgba(0, 128, 128, 1)">3</span>      let tempAge = list.<span style="color: rgba(255, 102, 0, 1)">age + 1</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">4</span>      list.age =<span style="color: rgba(0, 0, 0, 1)"> tempAge;
</span><span style="color: rgba(0, 128, 128, 1)">5</span>       <span style="color: rgba(255, 102, 0, 1)"> that.mesgShow = list;
</span><span style="color: rgba(0, 128, 128, 1)">6</span> }</pre>
</div>
<p>&nbsp;</p>
<p><span style="text-decoration: underline"><strong><em>附加:改变的代码:</em></strong></span></p>
<p><img src="https://img2020.cnblogs.com/blog/1884450/202101/1884450-20210108133929518-6679770.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>二、子组件向父组件传值</h2>
<p>父组件index.vue&nbsp; &nbsp;&nbsp;在父类引用标签上写上在子类$emit里面定义的方法名:send, 以及接收方法</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> &lt;template&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span>   &lt;view class="content"&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span>         &lt;son-show <span style="color: rgba(255, 102, 0, 1)">@send="getSonValue"</span>&gt;&lt;/son-show&gt;
<span style="color: rgba(0, 128, 128, 1)"> 4</span>   &lt;/view&gt;
<span style="color: rgba(0, 128, 128, 1)"> 5</span> &lt;/template&gt;
<span style="color: rgba(0, 128, 128, 1)"> 6</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> &lt;script&gt;
<span style="color: rgba(0, 128, 128, 1)"> 8</span>   import sonShow from '../../component/son.vue'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>   export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">      components: {
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">            sonShow
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">      methods:{
</span><span style="color: rgba(0, 128, 128, 1)">14</span>             <span style="color: rgba(255, 102, 0, 1)">getSonValue</span>: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res){
</span><span style="color: rgba(0, 128, 128, 1)">15</span>               console.log("res========="<span style="color: rgba(0, 0, 0, 1)">,res)
</span><span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">19</span> &lt;/script&gt;</pre>
</div>
<p>子组件;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> &lt;template&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span>   &lt;view class="" <span style="color: rgba(255, 102, 0, 1)">@click="sendMegToIndex"</span>&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 0, 1)">      点我向父组件传值
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>   &lt;/view&gt;
<span style="color: rgba(0, 128, 128, 1)"> 5</span> &lt;/template&gt;
<span style="color: rgba(0, 128, 128, 1)"> 6</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> &lt;script&gt;
<span style="color: rgba(0, 128, 128, 1)"> 8</span>   export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 0, 0, 1)">      methods:{
</span><span style="color: rgba(0, 128, 128, 1)">10</span>             <span style="color: rgba(255, 102, 0, 1)">sendMegToIndex</span>: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 128, 1)">11</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 向父组件传值第一个参数是<strong><span style="color: rgba(0, 0, 255, 1)">方法名</span></strong>:send   第二个参数是<strong><span style="color: rgba(0, 0, 255, 1)">传递的值</span></strong>:我是来自子组件的值</span>
<span style="color: rgba(0, 128, 128, 1)">12</span>               <span style="color: rgba(255, 102, 0, 1)">this.$emit("send","我来自子组件")
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">16</span>   
<span style="color: rgba(0, 128, 128, 1)">17</span> &lt;/script&gt;
<span style="color: rgba(0, 128, 128, 1)">18</span>
<span style="color: rgba(0, 128, 128, 1)">19</span></pre>
</div>
<h2>三. 兄弟组件传值</h2>
<p>定义一个eventBus.js文件,导出一个空的vue对象,在兄弟组件中引入bus.js的文件,在A组件通过bus.<span class="katex--inline"><span class="katex"><span class="katex-mathml">e m i t ( ) 传 递 , 在 B 组 件 中 的 c r e a t e d 函 数 中 ,</span></span></span></p>
<p><span class="katex--inline"><span class="katex"><span class="katex-mathml"> 使 用 b u s . emit()传递,在B组件中的created函数中,使用bus.<span class="katex-html"><span class="base"><span class="strut"><span class="mord mathdefault">e<span class="mord mathdefault">m<span class="mord mathdefault">i<span class="mord mathdefault">t<span class="mopen">(<span class="mclose">)<span class="mord cjk_fallback">传<span class="mord cjk_fallback">递<span class="mord cjk_fallback">,<span class="mord cjk_fallback">在<span class="mord mathdefault">B<span class="mord cjk_fallback">组<span class="mord cjk_fallback">件<span class="mord cjk_fallback">中<span class="mord cjk_fallback">的<span class="mord mathdefault">c<span class="mord mathdefault">r<span class="mord mathdefault">e<span class="mord mathdefault">a<span class="mord mathdefault">t<span class="mord mathdefault">e<span class="mord mathdefault">d<span class="mord cjk_fallback">函<span class="mord cjk_fallback">数<span class="mord cjk_fallback">中<span class="mord cjk_fallback">,<span class="mord cjk_fallback">使<span class="mord cjk_fallback">用<span class="mord mathdefault">b<span class="mord mathdefault">u<span class="mord mathdefault">s<span class="mord">.on接受</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p><span class="katex--inline"><span class="katex"><span class="katex-mathml"><span class="katex-html"><span class="base"><span class="strut"><span class="mord mathdefault"><span class="mord mathdefault"><span class="mord mathdefault"><span class="mord mathdefault"><span class="mopen"><span class="mclose"><span class="mord cjk_fallback"><span class="mord cjk_fallback"><span class="mord cjk_fallback"><span class="mord cjk_fallback"><span class="mord mathdefault"><span class="mord cjk_fallback"><span class="mord cjk_fallback"><span class="mord cjk_fallback"><span class="mord cjk_fallback"><span class="mord mathdefault"><span class="mord mathdefault"><span class="mord mathdefault"><span class="mord mathdefault"><span class="mord mathdefault"><span class="mord mathdefault"><span class="mord mathdefault"><span class="mord cjk_fallback"><span class="mord cjk_fallback"><span class="mord cjk_fallback"><span class="mord cjk_fallback"><span class="mord cjk_fallback"><span class="mord cjk_fallback"><span class="mord mathdefault"><span class="mord mathdefault"><span class="mord mathdefault"><span class="mord"><br><em><strong><span style="color: rgba(0, 0, 255, 1)">根组件如下:</span></strong></em></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> &lt;template&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span>   &lt;div id="app"&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span>   &lt;ChildA/&gt;
<span style="color: rgba(0, 128, 128, 1)"> 4</span>   &lt;ChildB/&gt;
<span style="color: rgba(0, 128, 128, 1)"> 5</span>   &lt;/div&gt;
<span style="color: rgba(0, 128, 128, 1)"> 6</span> &lt;/template&gt;
<span style="color: rgba(0, 128, 128, 1)"> 7</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> &lt;script&gt;
<span style="color: rgba(0, 128, 128, 1)"> 9</span>   import ChildA from './components/ChildA' <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 导入A组件</span>
<span style="color: rgba(0, 128, 128, 1)">10</span>   import ChildB from './components/ChildB' <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 导入B组件</span>
<span style="color: rgba(0, 128, 128, 1)">11</span>
<span style="color: rgba(0, 128, 128, 1)">12</span>   export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">13</span>   name: 'App'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">14</span>   components: {ChildA, ChildB} <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 注册A、B组件</span>
<span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">16</span> &lt;/script&gt;</pre>
</div>
<p><em><span style="color: rgba(0, 0, 255, 1)"><strong>兄弟A组件如下:</strong></span></em></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> &lt;template&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span>   &lt;div id="childA"&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span>   &lt;h1&gt;我是A组件&lt;/h1&gt;
<span style="color: rgba(0, 128, 128, 1)"> 4</span>   &lt;button @click="transform"&gt;点我让B组件接收到数据&lt;/button&gt;
<span style="color: rgba(0, 128, 128, 1)"> 5</span>   &lt;p&gt;因为你点了B,所以我的信息发生了变化:{{BMessage}}&lt;/p&gt;
<span style="color: rgba(0, 128, 128, 1)"> 6</span>   &lt;/div&gt;
<span style="color: rgba(0, 128, 128, 1)"> 7</span> &lt;/template&gt;
<span style="color: rgba(0, 128, 128, 1)"> 8</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> &lt;script&gt;
<span style="color: rgba(0, 128, 128, 1)">10</span>   export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">    data() {
</span><span style="color: rgba(0, 128, 128, 1)">12</span>       <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">13</span>         AMessage: 'Hello,B组件,我是A组件'
<span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">    },
</span><span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 0, 1)">    computed: {
</span><span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 0, 0, 1)">      BMessage() {
</span><span style="color: rgba(0, 128, 128, 1)">18</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这里存储从store里获取的B组件的数据</span>
<span style="color: rgba(0, 128, 128, 1)">19</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.$store.state.BMsg
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 0, 1)">    },
</span><span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)">    methods: {
</span><span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 0, 0, 1)">      transform() {
</span><span style="color: rgba(0, 128, 128, 1)">24</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 触发receiveAMsg,将A组件的数据存放到store里去</span>
<span style="color: rgba(0, 128, 128, 1)">25</span>         <span style="color: rgba(0, 0, 255, 1)">this</span>.$store.commit('receiveAMsg'<span style="color: rgba(0, 0, 0, 1)">, {
</span><span style="color: rgba(0, 128, 128, 1)">26</span>         AMsg: <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.AMessage
</span><span style="color: rgba(0, 128, 128, 1)">27</span> <span style="color: rgba(0, 0, 0, 1)">      })
</span><span style="color: rgba(0, 128, 128, 1)">28</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">30</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">31</span> &lt;/script&gt;</pre>
</div>
<p><span style="color: rgba(0, 0, 255, 1)"><em><strong>兄弟B组件如下</strong></em></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> &lt;template&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span>   &lt;div id="childB"&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span>   &lt;h1&gt;我是B组件&lt;/h1&gt;
<span style="color: rgba(0, 128, 128, 1)"> 4</span>   &lt;button @click="transform"&gt;点我让A组件接收到数据&lt;/button&gt;
<span style="color: rgba(0, 128, 128, 1)"> 5</span>   &lt;p&gt;因为你点了A,所以我的信息发生了变化:{{AMessage}}&lt;/p&gt;
<span style="color: rgba(0, 128, 128, 1)"> 6</span>   &lt;/div&gt;
<span style="color: rgba(0, 128, 128, 1)"> 7</span> &lt;/template&gt;
<span style="color: rgba(0, 128, 128, 1)"> 8</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> &lt;script&gt;
<span style="color: rgba(0, 128, 128, 1)">10</span>   export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">    data() {
</span><span style="color: rgba(0, 128, 128, 1)">12</span>       <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">13</span>         BMessage: 'Hello,A组件,我是B组件'
<span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">    },
</span><span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 0, 1)">    computed: {
</span><span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 0, 0, 1)">      AMessage() {
</span><span style="color: rgba(0, 128, 128, 1)">18</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这里存储从store里获取的A组件的数据</span>
<span style="color: rgba(0, 128, 128, 1)">19</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.$store.state.AMsg
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 0, 1)">    },
</span><span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)">    methods: {
</span><span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 0, 0, 1)">      transform() {
</span><span style="color: rgba(0, 128, 128, 1)">24</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 触发receiveBMsg,将B组件的数据存放到store里去</span>
<span style="color: rgba(0, 128, 128, 1)">25</span>         <span style="color: rgba(0, 0, 255, 1)">this</span>.$store.commit('receiveBMsg'<span style="color: rgba(0, 0, 0, 1)">, {
</span><span style="color: rgba(0, 128, 128, 1)">26</span>         BMsg: <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.BMessage
</span><span style="color: rgba(0, 128, 128, 1)">27</span> <span style="color: rgba(0, 0, 0, 1)">      })
</span><span style="color: rgba(0, 128, 128, 1)">28</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">30</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">31</span> &lt;/script&gt;</pre>
</div>
<h2>四. 通过vuex来实现组件传值</h2>
<p>在src中新建一个store文件夹,在文件夹中新建一个 index.js 文件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> import Vue from 'vue'
<span style="color: rgba(0, 128, 128, 1)"> 2</span> import Vuex from 'vuex'
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 0, 1)">Vue.use(Vuex)
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> const state =<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 初始化A和B组件的数据,等待获取</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span>   AMsg: ''<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>   BMsg: ''
<span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> const mutations =<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">receiveAMsg(state, payload) {
</span><span style="color: rgba(0, 128, 128, 1)">12</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 将A组件的数据存放于state</span>
<span style="color: rgba(0, 128, 128, 1)">13</span>   state.AMsg =<span style="color: rgba(0, 0, 0, 1)"> payload.AMsg
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">receiveBMsg(state, payload) {
</span><span style="color: rgba(0, 128, 128, 1)">16</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 将B组件的数据存放于state</span>
<span style="color: rgba(0, 128, 128, 1)">17</span>   state.BMsg =<span style="color: rgba(0, 0, 0, 1)"> payload.BMsg
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">20</span>
<span style="color: rgba(0, 128, 128, 1)">21</span> export <span style="color: rgba(0, 0, 255, 1)">default</span> <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Vuex.Store({
</span><span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)">state,
</span><span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 0, 0, 1)">mutations
</span><span style="color: rgba(0, 128, 128, 1)">24</span> })</pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/stephensurry/p/14251077.html
頁: [1]
查看完整版本: uni-app中组件传值(父传子,子传父)