vue-router children 子组件的问题

这段时间正在学习vue2x,在使用vue-router组件时遇到如下例子:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>动态路由</title>
</head>

<body>
    <div id="app">
        <router-view></router-view>
    </div>
</body>
<script src="../lib/vue.js"></script>
<script src="../lib/vue-router.js"></script>
<!-- 模板定义 -->
<script type="text/x-template" id="content_t">
    <div>
        <div>{{field.content}}</div>
        <router-link to="/">回到首页</router-link>
    </div>
</script>
<script type="text/x-template" id="home_t">
    <div>
        <li v-for="(v,k) in news">
            <router-link :to="{name:'content_as',params:{id:v.id,index:k}}">{{v.title}}</router-link>
        </li>
        <router-view></router-view>
    </div>
</script>
<script>
    var data = [
        { id: 1, title: "体育新闻", content: "nba新赛季开始......" },
        { id: 2, title: "科技新闻", content: "火星发现水......" }
    ]

    const home = {
        template: "#home_t",
        data() {
            return {
                news: data
            }
        }
    }
    const content = {
        template: "#content_t",
        data() {
            return {
                field: {}
            }
        },
        mounted() {
            var index = this.$route.params.index;
            this.field = data[index];
        }
    }

    const routeConf = [
        {
            path: "/", component: home, name: "home_as", children: [
                { path: "/content/:id", component: content, name: "content_as" }
            ]
        }
    ]

    let router = new VueRouter({
        routes: routeConf
    })

    var vm = new Vue({
        el: "#app",
        router: router
    })

</script>

</html>

遇到一个问题:

clipboard.png
切换体育新闻和科技新闻的时候不能实时变化,需要点一下回到首页,才行.
我觉得是子组件 mounted()的问题,因为只挂载一次.我需要怎么修改代码,才能让点击实时生效了?

阅读 8.7k
3 个回答

同一个路由之间切换,不会重新挂载的,你需要监听路由变化,做你想要的

mounted() 在 绑定vue实例(也可理解为dom元素初次渲染完毕)后执行且仅执行一次,同一组件下切换路由不会重复执行。
vue生命周期可参考此链接
可用@click事件中自定义方法让页面强制刷新去重新mounted
也可用watch 监听路由变化

watch: {
      $route ( newVal ) {
        this.field = data[newVal.params.index]
      }
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题