• 基于vuecli,测试非父子传值时,碰到 keepalive的神奇


    非父子传值测试

    一直都很好奇非父子传值到底如何,结果入坑许久才爬出来,才知道在脚手架里测试就是坑。

    问题: 测试非父子传值时,由于组件之间是通过路由进行跳转,值传过去又被刷掉
    思路: 因为路由跳转,相当于重排(不太确定,感觉不是重绘),因为数据又回到最原始的值

    首先我是基于vue-cli进行测试

    //组件一
    <template>
        <div>
          行到水穷处,坐看云起时!
          <p>来自组件传来的id{{id}}</p>
          <input type="text" v-model="id">
        </div>
    </template>
    <script>
    import bus from './../bus'
    export default{
        data() {
            return {
                id: 0
            }
        },
        created() {
             //获取组件2的数据
            bus.$on('sendId', (id) => {
                console.log(this.id, '我是组件000')
                this.id = id
            })
        }    
    }
    </script>
    
    //组件二
    <template>
        <div>
          行到水穷处,坐看云起时!
          <p>{{id}}</p>
          <button @click="sendId">点击发送id</button>
        </div>
    </template>
    <script>
    import bus from './../bus'
    export default{
        data() {
            return {
                id: 2
            }
        },
         methods: {
             sendId(){
               bus.$emit('sendId', this.id)
             }
         }
    }
    </script>
    

    我在 router文件夹下的index.js中配置

    export default new Router({
      routes: [
        {path: '/',
          components: {
            top: sibling1, //目的为了测试两个组件同时显示,值能否传递过去
            left: sibling2
          }
        },
        {path: '/si1', component: sibling1},
        {path: '/si2', component: sibling2}
      ]
    })
    

    App.vue代码

    <div id="app">
        <router-link to="/si1">第一1</router-link>
        <router-link to="/si2">第二2</router-link>
        <router-view name="left"></router-view>
        <router-view name="top"></router-view>
        //使用keep-alive 是为了缓存组件,不用重新创建
        <keep-alive> 
          <router-view></router-view>
        </keep-alive>
      </div>
    

    使用 keep-alive 点击链接1 时, 数字被修改2

    不适用keep-alive 点击链接1 时, 数字一直为0 参数传递过来又被覆盖

    结论:

    • 如果不适用 keep-alive,在路由跳转时,相当于重新开启页面,之前传递的参数都会消失
    • 同时也熟悉了bus传值的一些局限,如何使用vuex就可以不用考虑这个
  • 相关阅读:
    Python-文件阅读(open函数)
    列表推导式练习
    Python-集合(set)
    Python-元组(tuple)
    Python-函数-聚合和打散
    Python-列表-非count的计数方法
    Python-字典(dict)
    Python-列表(list)
    Python-字符串
    求三个元素的最大值,和最小值。
  • 原文地址:https://www.cnblogs.com/sinosaurus/p/8676826.html
Copyright © 2020-2023  润新知