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> <son-show :<span style="color: rgba(255, 0, 0, 1)">reciveUserInfo</span>="userInfo"></son-show></pre>
</div>
<p> </p>
<h3>子组件中:</h3>
<p> 通过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> </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> <template>
<span style="color: rgba(0, 128, 128, 1)"> 2</span> <view class="content">
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <son-show <span style="color: rgba(255, 0, 0, 1)">:reciveUserInfo="userInfo"</span>></son-show>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> </view>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> </template>
<span style="color: rgba(0, 128, 128, 1)"> 6</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <script>
<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> </script></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> <template>
<span style="color: rgba(0, 128, 128, 1)"> 2</span> <view class="">
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <blockv-<span style="color: rgba(0, 0, 255, 1)">for</span>="(item,index) in reciveUserInfo" :key="index">
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <view class="mesg">
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <text>{{item.userName}}</text>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <text>{{item.age}}</text>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> </view>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> </block>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> </view>
<span style="color: rgba(0, 128, 128, 1)">10</span> </template>
<span style="color: rgba(0, 128, 128, 1)">11</span>
<span style="color: rgba(0, 128, 128, 1)">12</span> <script>
<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> </script>
<span style="color: rgba(0, 128, 128, 1)">17</span> <style>
<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> </style>
<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> </p>
<p> </p>
<p> </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> </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> </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> </p>
<p> </p>
<p> </p>
<h2>二、子组件向父组件传值</h2>
<p>父组件index.vue 在父类引用标签上写上在子类$emit里面定义的方法名:send, 以及接收方法</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <template>
<span style="color: rgba(0, 128, 128, 1)"> 2</span> <view class="content">
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <son-show <span style="color: rgba(255, 102, 0, 1)">@send="getSonValue"</span>></son-show>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> </view>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> </template>
<span style="color: rgba(0, 128, 128, 1)"> 6</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <script>
<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> </script></pre>
</div>
<p>子组件;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <template>
<span style="color: rgba(0, 128, 128, 1)"> 2</span> <view class="" <span style="color: rgba(255, 102, 0, 1)">@click="sendMegToIndex"</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> </view>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> </template>
<span style="color: rgba(0, 128, 128, 1)"> 6</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <script>
<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> </script>
<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> <template>
<span style="color: rgba(0, 128, 128, 1)"> 2</span> <div id="app">
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <ChildA/>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <ChildB/>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> </div>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> </template>
<span style="color: rgba(0, 128, 128, 1)"> 7</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> <script>
<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> </script></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> <template>
<span style="color: rgba(0, 128, 128, 1)"> 2</span> <div id="childA">
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <h1>我是A组件</h1>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <button @click="transform">点我让B组件接收到数据</button>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <p>因为你点了B,所以我的信息发生了变化:{{BMessage}}</p>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> </div>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> </template>
<span style="color: rgba(0, 128, 128, 1)"> 8</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> <script>
<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> </script></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> <template>
<span style="color: rgba(0, 128, 128, 1)"> 2</span> <div id="childB">
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <h1>我是B组件</h1>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <button @click="transform">点我让A组件接收到数据</button>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <p>因为你点了A,所以我的信息发生了变化:{{AMessage}}</p>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> </div>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> </template>
<span style="color: rgba(0, 128, 128, 1)"> 8</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> <script>
<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> </script></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> </p><br><br>
来源:https://www.cnblogs.com/stephensurry/p/14251077.html
頁:
[1]