Vue.js加载单文件组件

时间:2017-06-15 13:05:03

标签: javascript vuejs2 vue-component

我是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)
});

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

任何人都可以表明应该这样做吗?感谢

1 个答案:

答案 0 :(得分:55)

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

App

然后使用标记名称直接将它们添加到<template> <div id="app"> <grid></grid> <pattern-list></pattern-list> </div> </template> 模板中:

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

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

您还可以将组件注册到Vue实例,如下所示:

script

或在单个文件组件的<script> import Grid from './vue/Grid.vue' export default { name: 'app', components: { 'grid': Grid, 'pattern-list': PatternList } }); </script> 标记内:

`Array
(
    [Date] => Thu, 15 Jun 2017 13:06:37 GMT
    [Server] => Apache/2.4.18 (Win32) OpenSSL/1.0.2f PHP/5.6.18
    [X-Powered-By] => PHP/5.6.18
    [Content-Length] => 7790
    [Content-Type] => application/json; charset=utf-8
)`

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