我正在一个项目中构建一个管理页面,该项目使用一个名为"页面"的付费主题.

问题是,在这些主题中,<nav><header>必须是<body>的直接子女.

当我使用Vue bootstrap 应用程序时,我将其渲染为<div>id设置为root.然后将<nav><header>嵌套在该容器内(即<div id="root">以下).

我一直在探索如何让Vue组件成为身体的直接子元素.

怎么做?


我得到的是:

<body>
    <div>
        <nav></nav>
        <header></header>
    </div>
</body>

主题需要:

<body>
    <nav></nav>
    <header></header>
</body>

推荐答案

在Vue 2.0中,无法将根实例装载到body或html元素.您将收到[Vue warn]: Do not mount Vue to <html> or <body> - mount to normal elements instead.条错误消息.

仅作为安装点提供.与Vue 1不同.x、 在所有情况下,挂载的元素都将替换为Vue生成的DOM.因此,不建议将根实例装载到<html><body>.

https://vuejs.org/v2/api/#el

解决方法是在component mount()事件中手动移动元素.

<div id="app">
  <navbar :msg="msg"></navbar>

  Lorem ipsum dolor sit amet, consectetur adipisicing elit.

  <button @click="msg = 'tested'">Test 2-way binding</button>
</div>

工作流示例:

new Vue({
    el: '#app',
  data: {
    msg: 'message'
  },
  components: {
    'navbar': {
      template: `<navbar>{{ msg }}</navbar>`,
      props: ['msg'],
      mounted() {
        document.body.insertBefore(this.$el, document.body.firstChild)
      }
    }
  }
})

https://jsfiddle.net/jedrzejchalubek/m9dnsjjr/2/

Vue.js相关问答推荐

我可以手动访问 vue-router 解析器吗?

何时将代码拆分为 Nuxt 中的组件?

Vue:将点击事件绑定到动态插入的内容

如何在 vue.js 模板中显示空间而不是 undefined 和 null?

Vuetify 在数据表中插入操作按钮并获取行数据

在组件的样式部分使用 Vue 变量

在 SASS 中使用 Vuetify 类

Vue @click 不适用于存在 href 的anchor锚标记

v-model 不会检测到 jQuery 触发事件所做的更改

使用 vue-test-utils 配置过滤器

SVG 加载 vue-svg-loader; [Vue 警告]:无效的组件定义

NuxtServerInit 在 Vuex 模块模式下不起作用 - Nuxt.js

我在 Nuxt 2.14.0 中运行的是什么版本的 Vue?

如何将项目推送到 Vuejs 中数据对象的数组中? Vue 似乎没有关注 .push() 方法

是否可以从 vue-devtools 中排除 vue 事件和 vuex Mutations?

Vue 2 转换不起作用

v-if 未在计算(computed)属性上触发

用于 nuxt.js 构建的自定义 index.html

如何将props传递给组件的故事?

Vue.js 显示空格(换行符)