【问题标题】:Unknown custom element: <router-link> in VueJS未知的自定义元素:VueJS 中的 <router-link>
【发布时间】:2017-03-07 16:40:35
【问题描述】:

我尝试将我的导航逻辑提取到一个子组件中,结构如下:

App.vue -- Header.vue --- Navigation.vue

我正在尝试使用 Navigation.vue 中的属性,但收到以下错误:

Unknown custom element: &lt;router-link&gt; - did you register the component correctly? For recursive components, make sure to provide the "name" option.

到目前为止,这是我的应用程序,非常简单。

ma​​in.js

require('bootstrap-sass/assets/stylesheets/_bootstrap.scss')
// require('bootstrap-sass/assets/javascripts/bootstrap.js')
require('./assets/sass/app.scss')

import Vue from 'vue'
import VueRouter from 'vue-router'
import VueMoment from 'vue-moment'
import VueResource from 'vue-resource'

import { configRouter } from './routes'

import App from './App'

// Debug mode
Vue.config.debug = true

// Devtools enabled
Vue.config.devtools = true

// Silence logs and warnings
Vue.config.silent = false

// install router
Vue.use(VueRouter)

// install vue-moment filter
Vue.use(VueMoment)

// install resource
Vue.use(VueResource)

// create router
var router = new VueRouter({
    history: true,
    saveScrollPosition: true
})

// configure router
configRouter(router)

/* eslint-disable no-new */
// new Vue({
//     el: 'body',
//     components: { App, router }
// })
router.start(App, '#app')

App.vue

<template>
    <div>
        <site-header></site-header>
        <router-view></router-view>
    </div>
</template>

<script>
    import SiteHeader from './components/Header'

    export default {
        components: {
            SiteHeader
        }
    }
</script>

Header.vue

<template>
    <header class="masthead container-fluid">
        <div class="row">

            <!-- Branding -->
            <div class="col-md-3"> &nbsp; </div>
            <!-- / Branding -->

            <!-- Primary Navigation -->
            <navigation></navigation>
            <!-- / Primary Navigation -->

            <!-- Actions -->
            <div class="col-md-3"> &nbsp; </div>
            <!-- / Actions -->

        </div>
    </header>
</template>

<script>
    import Navigation from './Navigation'

    export default {
        components: {
            Navigation
        },
        data () {
            return {
                msg: 'Hello World!'
            }
        }
    }
</script>

Navigation.vue

<template>
    <div class="col-md-6">
        <ul class="primary-navigation list-inline list-unstyled">
            <li> <router-link to="/about">About</router-link> </li>
            <li> TEST </li>
            <li> TEST </li>
            <li> TEST </li>
        </ul>
    </div>
</template>
<script>
    import VueRouter from 'vue-router'

    export default { components: { VueRouter } }

</script>

我做错了什么?

版本:vue 1.0.28 & vue-router 0.7.13

【问题讨论】:

    标签: javascript vue.js vue-component vue-router


    【解决方案1】:

    来自vue-router 文档:http://router.vuejs.org/en/essentials/getting-started.html

    // 3. Create the router instance and pass the `routes` option
    // You can pass in additional options here, but let's
    // keep it simple for now.
    const router = new VueRouter({
      routes // short for routes: routes
    })
    

    我相信在创建路由器实例时需要传递路由。我真的不知道你的 configRouter(router) 做了什么,但你可以保持简单,直到它开始工作。之后,您可以开始模块化组件和配置。

    另外,我不确定router.start,它没有在我能找到的文档中的任何地方指定。路由器文档推荐使用这种简单的方法来创建应用的根实例:

    // 4. Create and mount the root instance.
    // Make sure to inject the router with the router option to make the
    // whole app router-aware.
    const app = new Vue({
      router
    }).$mount('#app')
    

    可能您的应用还没有路由器感知,正如上面的 cmets 所述(来自文档,而不是来自我!)。这可能是导致router-link 错误的原因。您可以尝试文档推荐的更简单的方法吗?

    顺便问一下,你用的是哪个版本的 Vue 和 Vue-Router?如果不是当前版本(vue 2.0.3 和 vue-router 2.0.1),那么请忽略我上面的回答。

    【讨论】:

    • 你也不需要在 Navigation.vue 中指定export default { components: { VueRouter } },真正的问题在其他地方。
    • 感谢@Mani,但我使用的是 vue 1.0.28 和 vue-router 0.7.13 该应用程序必须能够识别路由器,就像我手动将 /about URL 输入到正确的视图中一样,这意味着 属性在 App.vue 中工作,因为视图正确更改。
    • 是的,我正在尝试一些东西,但显然忘记在发布之前将其删除 :)
    • 抱歉,我最近开始使用 Vue,我的应用程序中有最新版本。所以我不能在这里帮你。能否在你的问题中指定 vuevue-router 的版本,以便其他人可以查看?
    • 谢谢,我可能应该升级,这是项目的开始,所以现在绝对是升级的好时机。
    猜你喜欢
    • 2019-09-22
    • 2018-09-15
    • 2020-07-11
    • 2019-08-11
    • 2020-05-16
    • 2019-09-04
    • 2019-11-22
    • 2021-11-24
    • 2018-05-06
    相关资源
    最近更新 更多