【问题标题】:Vue2: How to specify the vue-router root component?Vue2:如何指定 vue-router 根组件?
【发布时间】:2016-12-01 07:06:47
【问题描述】:

刚升级到Vue2.0,还不是很熟悉。

有一个变化给我带来了麻烦,vue-router初始化[docs]被改变了:

在我的例子中,初始化代码更改如下:

import RootApp from './components/RootApp.vue';

router.start(RootApp, '#app')

import RootApp from './components/RootApp.vue';

new Vue({
  el: '#app',
  router: router,
  render: h => h(RootApp)
})

很快我发现以这种新的情况指定RootApp 会使根应用程序代码对我来说模棱两可。

在旧情况下,每个子路由元素的 $root 元素产生 RootApp 实例,而在新情况下,它产生另一个包含 RootApp 实例作为其唯一子级的组件。

那么,麻烦了,有什么方法可以创建RootApp 只是在Vue2 中充当根节点?

或者我猜,有没有办法像下面这样创建一个 Vue 实例(但尝试失败):

# Failed code to tell what I want

import RootApp from './component/RootApp.vue';
new RootApp({
    el: '#app',
    router: router,
});

【问题讨论】:

    标签: mvvm ecmascript-6 vue.js vuejs2 vue-router


    【解决方案1】:

    测试了半天,发现最后一次尝试也差不多了,再看一个问题:

    Vue.js 2: How to initialize(construct) a Vue component from a .vue file?

    以下代码完美运行!

    import RootApp from './component/RootApp.vue';
    const RootAppConstructor = Vue.extend(RootApp);
    new RootAppConstructor({
        el: '#app',
        router: router,
    });
    

    【讨论】:

    • 这是一种很好的重构方式。 +1 - 还可以维护您的
    • @GuyC 维护
    • 没问题 - 如果您使用我的答案,您将不得不以不同的方式使用 CSS,但是使用上面的方法,您的 @987654324 中有一个 <style> 标记@ 文件,它将允许您为整个应用程序设置基本样式。基本上我喜欢这个主意 - 不错!
    【解决方案2】:

    您可以重构您的 RootApp,以便它的方法/数据等...都驻留在这个新的 Vue 根实例中。

    这也意味着将RootApp 的模板复制到您的主index.html(或您使用的任何文件)中。完成后,尽管一切都应该像以前一样正常运行,尽管不是来自单个 .vue 文件。

    【讨论】:

    • 不明白。我只想折叠多余的根组件。
    • 抱歉,这就是我的意思,您可以通过将您的方法、数据等移动到新的根实例中来重构您当前的应用程序 - 从而使其不再是多余的。据我所知,您不能渲染子组件然后要求 Vue 将其视为 $root,也不能使用 .vue 文件作为应用程序的根目录
    猜你喜欢
    • 2021-12-29
    • 1970-01-01
    • 2019-07-11
    • 2018-04-22
    • 1970-01-01
    • 2017-05-21
    • 2017-09-05
    • 2018-06-12
    • 2019-03-01
    相关资源
    最近更新 更多