1, 什么是组件?

  1. 组件是一个vue项目的基本组成部分 , 组件分为三种: 根组件, 全局组件, 局部组件<br /> 一个vue项目至少要有一个组件,就是根组件, 其他组件可根据需求创建, <br /> 例如: 轮播图组件,导航条组件,星级评分组件

2, 如何创建组件?

  1. 根组件: 使用 new Vue()创建的vue对象就是根组件, 必不可少<br /> 全局组件: 在全局作用域使用Vue.component()定义的组件, 在全局范围内都可用<br /> 局部组件: 在组件的components字段中定义的组件, 只能在他所在的组件中使用

3, 如何使用组件?

  1. 组件在定义后会有一个组件名, 把组件名当做标签名使用即可<br /> 组件名定义时可以用小驼峰, 使用时必须用小写

4, 为什么要使用组件?

  1. 往往一个项目中数据和功能比较多而且复杂, 如果都写在根组件中会显得臃肿,杂乱,不利于后期维护,更新, BUG也不方便, 可以使用组件把一个项目拆分成多个模块, 每一个模块使用一个组件来实现, 可实现代码分离, 结构清晰, 更易于阅读和维护更新<br /> 有时在项目中, 一个模块可能在多个页面使用, 此时可以使用组件封装这个模块, 使用时调用组件,实现代码的复用,简化项目
  1. <body>
  2. <script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script>
  3. <div id='myApp'>
  4. 组件中data的数据只能在组件自身的模板中使用, 不能直接在父组件或子组件模板中用
  5. <!-- {{age}}-{{sex}} -->
  6. <h1></h1>
  7. <!-- <mycom1>全局组件可以在任意一个组件的模板中调用</mycom1>
  8. <hr>
  9. <mycom2>局部组件只能在它的父组件模板中调用</mycom2> -->
  10. <!-- 组件可以用双标签写法, 也可以用如下单标签写法 -->
  11. <mycom2></mycom2>
  12. <!-- 组件名命名规则: 建议使用小驼峰命名, 调用时改成小写, 用-连接, 有语法提示 -->
  13. <my-com3></my-com3>
  14. </div>
  15. <script>
  16. // 在全局作用域中定义的组件叫全局组件, 在全局范围内都能使用
  17. // 使用Vue.component()创建全局组件, 第一个参数是组件名,第二个参数是组件配置
  18. Vue.component("mycom1", {
  19. // 在template字段中设置组件模板, 组件配置中至少要有模板
  20. template: `<header><nav>这是页面导航条{{age}}</nav> </header>`,
  21. // 组件中也有data动态数据, 通过data函数的返回值设置的
  22. data(){
  23. return {
  24. // 由于不同组件的模板作用域是相互隔离的,所以组件的data数据只能在当前组件的模板中使用
  25. age: 20
  26. }
  27. },
  28. // 组件中用于vue对象相同的功能,如, 过滤器,计算属性,函数,监视器,生命周期钩子
  29. })
  30. Vue.component("myCom3", {
  31. // 组件模板要求有且仅有一个根标签
  32. template:`<h1>123</h1>`
  33. })
  34. // vue对象就是vue项目中的根组件,必不可少, 而且有且仅有一个
  35. new Vue({
  36. el: '#myApp',
  37. data: { },
  38. methods: { },
  39. // 在一个组件的components字段中定义子组件(局部组件)
  40. components: {
  41. // 键值对结构, 分别是 组件名: {组件配置}
  42. mycom2: {
  43. template: `<h2>我是子组件mycom2,性别:{{sex}}</h2>`,
  44. data(){return {
  45. sex: "男"
  46. }},
  47. created() {
  48. },
  49. }
  50. }
  51. })
  52. </script>
  53. </body>

vue组件模板

  1. <body>
  2. <script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script>
  3. <div id='myApp'>
  4. <my-com></my-com>
  5. </div>
  6. <!-- body中创建独立组件模板, 使用template标签创建模板 -->
  7. <template id="myTem">
  8. <!-- template中要求根标签有且仅有一个 -->
  9. <div>
  10. 这是子组件
  11. </div>
  12. </template>
  13. <script>
  14. // 建议在根组件创建之前,创建子组件
  15. Vue.component("myCom", {
  16. // template: "<div></div>",
  17. template: "#myTem",
  18. data(){
  19. return{
  20. }
  21. }
  22. })
  23. new Vue({
  24. el: '#myApp',
  25. data: {
  26. },
  27. methods: {
  28. }
  29. })
  30. </script>
  31. </body>