美文网首页
Vue中路由变化、父传子的变量为空

Vue中路由变化、父传子的变量为空

作者: 坏丶毛病 | 来源:发表于2020-09-29 09:37 被阅读0次

    问题一:

    在vue中,父组件传递给子组件的数据,我们在挂载后打印它,会得到一个空的值也有可能报错(未定义),但是我们却可以直接渲染到页面上。

    那么这是什么原因呢?

    刚开始组件挂载,数据并没有从父组件传递过来,所以mounted打印不出来

    之所也页面能渲染,因为vue是数据驱动,当数据实时变更后,页面发生diff算法,会更新视图,所以才可以渲染

    那么我们想在mounted或其他地方使用它,进行一些逻辑,需要怎么办呢?

    我们可以通过watch监听它的变化。

    解决方案:

    export default {
        name: "JobDataTable",
        props:["Data"],
        watch:{
            Data (val, oldVal) {
                if (val !== oldVal) {
                    // 写你需要处理的逻辑
                }
            }
        }
    }
    

    prop中的Data是我们接收到的父组件发送过来的数据,我们可以监听它的变化,当它从原本的空值变为有数据的值时,我们就可以进行一些操作。(val是新的值,即现在的值,oldVal是变化前的旧值)

    问题二:

    我们时常需要通过路由传参实现跳转页面并传递某个参数过去。

    但是假设我们有个全局搜索框,我们通过搜索把当前搜索值作为参数跳转到某个页面,已经跳到这个页面了,我们再使用全局的搜索框,这是页面肯定不跳转了(已经处在同一个界面了),只是参数会发生相应的改变,这是我们就需要去监听参数的变化

    解决方案:

    '$route.query': function (newVal, oldVal) {
          // 当参数变化时,处理对应的逻辑             
    }
    

    附加(路由变化)

    '$route.path': function (newVal, oldVal) {
          // 当路由变化时,处理对应的逻辑             
    }
    

    问题三:

    特殊需求:我们已经通过路由传参跳转到对应的页面,并把当前参数传递过去了,那么我们人为想改变这个参数怎么办?

    解决方案:

    this.$router.push({
        query: {
            "Id": ""
        }
    });
    

    id是你要改变的参数值,后面的是你要赋予的值,这里我把它置为空。

    好了,以上就是vue中一些数据变更,我们需要去实时监听的解决办法,希望对大家有帮助。

    如有问题,请指出,接受批评。

    相关文章

      网友评论

          本文标题:Vue中路由变化、父传子的变量为空

          本文链接:https://www.haomeiwen.com/subject/eewsuktx.html