当插入一个新组件时,其余的所有组件都将消失在应用程序中

ext*_*axt 2 vue.js vuejs2

我总是使用 vue-cli 构建我的 SPA 应用程序。

这次我正在构建一个小项目,我将 Vue 与脚本标签结合在一起。

但我不明白以下行为。

// app.js

Vue.component('todo-item', {
  template: `<div>Todo Component!</div>`
})

var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue App!'
  }
})
Run Code Online (Sandbox Code Playgroud)

HTML index.html

<!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</title>
</head>
<body>

  <div id="app">

    {{ message }}

    <div>
      Just some content...
    </div>

  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script src="./js/app.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

结果是这样的:

在此处输入图片说明

现在,我将尝试'<todo-item />'在 HTML 中添加Component:

<div id="app">

    {{ message }}

    <todo-item />

    <div>
      Just some content...
    </div>

  </div>
Run Code Online (Sandbox Code Playgroud)

文字“只是一些内容...”消失了:

在此处输入图片说明

我究竟做错了什么?

Dan*_*iel 7

TL; 博士;

而不是<todo-item/>使用<todo-item></todo-item>

未编译的 vue.js 不支持自关闭 html 标签。

见风格指南:

不幸的是,HTML 不允许自定义元素自动关闭——只有官方的“void”元素。这就是为什么只有当 Vue 的模板编译器可以在 DOM 之前到达模板,然后提供符合 DOM 规范的 HTML 时,才可以使用该策略。

https://vuejs.org/v2/style-guide/#Self-closure-components-strongly-recommended

和github中的问题:

https://github.com/vuejs/vue/issues/1036
https://github.com/vuejs/vue/issues/8664