欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

零基础学习Vue: 第37课 Vue动态组件切换获取数据渲染页面方法:

程序员文章站 2022-03-07 17:19:36
...

零基础学习Vue: 第37课 Vue动态组件切换获取数据渲染页面方法:

解决方法一:

设置watch监听事件,监听params传递数据的变化从而触发监听函数 获取数据

watch:{
    $route(){
    //假装在里面请求页面数据
         alert('成功打开'+this.$route.params.page+'页面,成功请求到页面'+this.$route.params.page+'的数据');
     }
}

解决方法二:

给router-view标签添加key值 表示唯一性 这样每次切换aaa页面组件就会重新渲染从而触发created生命周期函数获取数据

<router-view :key="Math.random()"></router-view>

下面是详细实现代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="app">
    <!-- 实验目的:当切换的组件相同而params传输的数据不同时 如何通过不同的数据显示对应的页面 -->
    <!-- router-link页面切换路由 可见切换组件都相同 只是传递数据不同 -->
   <router-link :to="{name:'aaalink',params:{page:1}}">文章1</router-link>
    <router-link :to="{name:'aaalink',params:{page:2}}">文章2</router-link>
    <router-link :to="{name:'aaalink',params:{page:3}}">文章3</router-link>

    <!-- router-view跳转显示的页面组件 -->
    <router-view></router-view>

    <!-- 解决方法二 给router-view标签添加key值 表示唯一性 这样aaa页面组件就会重新渲染从而触发created生命周期函数获取数据-->
    <!-- <router-view :key="Math.random()"></router-view> -->
</div>


<!-- 引入vue -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<!-- 引入vue-router路由 -->
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>

<script>

    //2.创建子组件aaa (动态组件)由传输数据不同而显示不同的数据 但是页面的框架结构是相同的
    let aaa = {
        template:'<div>我是第{{$route.params.page}}篇文章</div>',
        // 生命周期函数 当页面切换时触发 可在此函数内请求数据
        created(){  // 因为切换的页面组件都是aaa页面组件 所以created生命周期函数只在第一次渲染aaa组件时执行
            alert('现在渲染页面'+this.$route.params.page+',现在我可以通过传输过来的参数创建url请求数据');
        },
        //以下是解决方法一
        //用于传递的this.$route.params.page值是变化的,所以我们可以监听它的变化触发函数事件来请求数据
        watch:{
            $route(){
                alert('成功打开'+this.$route.params.page+'页面,成功请求到页面'+this.$route.params.page+'的数据');
            }
        }
    }

    // 3.创建路由和组件的映射表
    let routes = [  //路由和组件的映射表    component:aaa注册子组件
        {path:'/aaa/:page',name:'aaalink',component:aaa},
    ];

    //4.实例化路由对象
    let router = new VueRouter({
        routes
    })

    // 1.创建根组件
    let vm = new Vue({
        el:'#app',
        router  //5.注册路由
    })
</script>
</body>
</html>

运行结果如下:

零基础学习Vue: 第37课 Vue动态组件切换获取数据渲染页面方法:
零基础学习Vue: 第37课 Vue动态组件切换获取数据渲染页面方法:

相关标签: vue