Vue.js 加载单文件组件

Vue.js loading single-file components

我是 Vue.js 的新手,想使用单文件组件,但我不了解工作流程。

例如,我有三个组成部分:AppGridList

App.vue

<template>
    <div id="app">
        <div id="grid"></div>
        <div id="right"></div>
    </div>
</template>

<script>
    export default {
        name: 'app',
        data () {
            return {
                message: 'Hello Vue!'
            }
        }
    }
</script>

Grid.vue

<template>
    <div id="left"></div>
</template>

<script>
    export default {
        name: 'grid',
        data: function () {
            return {
                grid: 'some-data'
            }
        }
    }
</script>

List.vue

<template>
    <div id="right"></div>
</template>

<script>
    export default {
    name: 'list',
    data: function () {
        return {
            text: 'some-text'
        }
    }
}
</script>

Main.js

import Vue from 'vue'
import App from './vue/App.vue'
import Grid from './vue/Grid.vue'
import PatternList from './vue/PatternList.vue'

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

new Vue({
    el: '#grid',
    render: h => h(Grid)
});

new Vue({
    el: '#right',
    render: h => h(PatternList)
});

它有效,但我希望这不是创建嵌套组件的正确方法。

谁能告诉我应该怎么做?谢谢

您可以使用 Vue.component method 注册组件:

import Vue from 'vue'
import App from './vue/App.vue'
import Grid from './vue/Grid.vue'
import PatternList from './vue/PatternList.vue'

Vue.component('grid', Grid);
Vue.component('pattern-list', PatternList);

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

然后直接使用标签名称将它们添加到 App 模板:

<template>
  <div id="app">
    <grid></grid>
    <pattern-list></pattern-list>
  </div>
</template>

这会全局注册组件,这意味着任何 Vue 实例都可以将这些组件添加到它们的模板中,而无需任何额外设置。


你也可以将组件注册到 Vue 实例,像这样:

new Vue({
  el: '#app',
  render: h => h(App),
  components: {
    'grid': Grid,
    'pattern-list': PatternList
  }
});

或者单文件组件的script标签内:

<script>
import Grid from './vue/Grid.vue'

export default {
  name: 'app',
  components: {
    'grid': Grid,
    'pattern-list': PatternList
  }
});
</script>

这会将组件注册到该 Vue 实例,这意味着这些已注册的组件将只能在该 Vue 实例的模板中使用。子组件将无法访问那些已注册的组件,除非这些组件也已注册到子 Vue 实例。