首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >路由器视图继续显示组件信息,即使在移动到其他组件之后

路由器视图继续显示组件信息,即使在移动到其他组件之后
EN

Stack Overflow用户
提问于 2021-08-06 12:09:03
回答 1查看 278关注 0票数 0

我是通过创建一个实践应用程序来学习VueJS的,我被困在Authors组件中的一个位置上,我有一个作者列表。我希望能够单击列表项并导航到AuthorDetail组件,到目前为止一切正常。当我使用顶部的导航条移动到其他视图(如HomeAbout )时,就会出现问题,AuthorDetail组件仍然是可见的(它应该消失!)

App.vue内部代码

代码语言:javascript
复制
<template>
  <div id="nav">
    <router-link to="/">Home</router-link> |
    <router-link to="/authors">Authors</router-link> | 
    <router-link to="/about">About</router-link>
  </div>
  <router-view />
</template>

<style lang="scss">
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  max-width: 480px;
  margin: auto;
  border: 1px solid #2c3e50;
  border-radius: 5px;
  padding: 20px;
}

#nav {
  padding: 10px;
  border-bottom: 1px solid #e2e2e2;
  margin-bottom: 30px;

  a {
    font-weight: bold;
    color: #2c3e50;

    &.router-link-exact-active {
      color: #42b983;
    }
  }
}
</style>

router/index.js中的代码

代码语言:javascript
复制
import { createRouter, createWebHistory } from "vue-router";
import Home from "../views/Home.vue";
import Authors from "../views/Authors.vue";
import AuthorDetail from "../views/AuthorDetail.vue";

const routes = [
  {
    path: "/",
    name: "Home",
    component: Home,
  },
  {
    path: "/authors",
    name: 'Authors',
    component: Authors
  },
  {
    path: "/authors/:id",
    name: "AuthorDetail",
    component: AuthorDetail
  },
  {
    path: "/about",
    name: "About",
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () =>
      import(/* webpackChunkName: "about" */ "../views/About.vue"),
  },
];

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes,
});

export default router;

Authors组件中的代码。

代码语言:javascript
复制
<template>
    <div>
        <h1>Authors</h1>
        <p>Most Popular Authors (TheTestRequest API)</p>

        <div class="authors-list" :key="author.id" v-for="author in authors">
            <router-link :to="{ name: 'AuthorDetail', params: { id: author.id}}">
                <AuthorCard @click="showAuthor(author.id)" :author="author"></AuthorCard>
            </router-link>
        </div>
    </div>
</template>

<script>
    import AuthorCard from '@/components/AuthorCard'

    export default {
        name: "Authors",
        components: {
            AuthorCard
        },
        data(){
            return {
                authors: []
            }
        },
        methods: {
            async fetchAuthors(){
                const res = await fetch('https://thetestrequest.com/authors')
                const data = await res.json()
                return data
            },
            showAuthor(authorId){
                console.log("Author Clicked", authorId);
            }
        },
        async created() {
            this.authors = await this.fetchAuthors()
        },
    }
</script>

<style lang="scss" scoped>
    .authors-list {
        margin-top: 2em;
        // transition: box-shadow .3s;

        a {
            text-decoration: none;
            color: black;
        }
    }
</style>

注意:我正在使用thetestrequest.com来获取这个实践应用程序的数据。

UI示例:

EN

回答 1

Stack Overflow用户

发布于 2021-08-06 12:51:52

结果,控制台出现了一个错误,帮助我解决了这个问题。

错误:

代码语言:javascript
复制
AuthorDetail.vue?0959:6 Uncaught (in promise) TypeError: Cannot read property 'avatar' of null
    at Proxy.eval (AuthorDetail.vue?0959:6)
    at renderComponentRoot (runtime-core.esm-bundler.js?5c40:1168)
    at componentEffect (runtime-core.esm-bundler.js?5c40:5214)
    at reactiveEffect (reactivity.esm-bundler.js?a1e9:42)
    at effect (reactivity.esm-bundler.js?a1e9:17)
    at setupRenderEffect (runtime-core.esm-bundler.js?5c40:5167)
    at mountComponent (runtime-core.esm-bundler.js?5c40:5126)
    at processComponent (runtime-core.esm-bundler.js?5c40:5084)
    at patch (runtime-core.esm-bundler.js?5c40:4690)
    at componentEffect (runtime-core.esm-bundler.js?5c40:5287)

因此,一个简单的检查v-if="avatar"AuthorDetail模板做了我的诀窍。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68681336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档