3.2 组件的构成

这一节我们来看看HelloWorld组件。
组件由三部分,html模板、javascript代码以及css规则,这三部分并非一定要存在的,有些情景不需要某些部分,也是可以的。
首先是template(模板)部分,这部分实际上是HTML。所有组件都是以template(模板)来标注的。
这段代码和HTML基本没有区别。第3行有一个{{msg}},后面script部分会提到。
<template>
    <div class="hello">
        <h1>{{msg}}</h1>
        <p>
            Foraguideandrecipesonhowtoconfigure/customizethisproject,
            <br/>
            checkoutthe
            <a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-clidocumentation</a>
            .
        </p>
        <h3>InstalledCLIPlugins</h3>
        <ul>
            <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a>
            </li>
            <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a>
            </li>
        </ul>
        <h3>EssentialLinks</h3>
        <ul>
            <li><a href="https://vuejs.org" target="_blank" rel="noopener">CoreDocs</a>
            </li>
            <li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a>
            </li>
            <li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">CommunityChat</a>
            </li>
            <li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a>
            </li>
            <li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a>
            </li>
        </ul>
        <h3>Ecosystem</h3>
        <ul>
            <li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a>
            </li>
            <li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a>
            </li>
            <li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a>
            </li>
            <li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a>
            </li>
            <li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a>
            </li>
        </ul>
    </div>
</template>
接下来是script部分:
<script>
export default{
    name:'HelloWorld',
    props:{
        msg:String
    }
}
</script>
script部分没有data部分,但是有props。两者的异同是什么呢?
首先,data和props里面的变量都可以在template(模板)部分用双大括号引用,例如{{msg}}
然后,data是页面内部的数据,页面在运行的时候随时可以更改里面的值;props是外部给的值,它的值只能读取不能改动。props的值在使用组件的时候给定,如HelloWorld的使用:
就要给出msg的值,也就是说msg的值,是在使用HelloWorld组件的那个页面指定的。
最后是style部分:
<style scoped
h3 {
      margin: 40px 0 0;
}
ul {
      list-style-type: none;
      padding: 0;
}
li {
      display: inline-block;
      margin: 0 10px;
}
{
      color: #42b983;
}
</style   
这部分没有特别,就是样式,其中scoped代表样式只在本页面生效。