• 【Vue 组件化开发 二 】注册组件的语法糖、组件模板的分离写法、组件的数据


    目录

    前言

    一、注册组件的语法糖

    二、组件模板的分离写法

    1.script标签

    2. template标签

    三、组件的数据

     1.存放问题

    2.组件的data为什么必须要是函数


    前言

    完整内容请关注:Vue 的基础学习_小余努力搬砖的博客-CSDN博客https://blog.csdn.net/yzq0820/category_11934130.html?spm=1001.2014.3001.5482

    一、注册组件的语法糖

    注册组件时候可以不实例化组件对象,直接在注册的时候实例化。{}就是一个组件对象。

    1. <div id="app">
    2. <cpn1>cpn1>
    3. <cpn2>cpn2>
    4. div>
    5. <script src="../js/vue.js">script>
    6. <script>
    7. // 1.注册全局组件语法糖
    8. Vue.component('cpn1', {
    9. template:`
    10. <div>
    11. <h2>全局组件语法糖h2>
    12. <p>全局组件语法糖p>
    13. div>`
    14. })
    15. const app = new Vue({
    16. el:"#app",
    17. components:{//局部组件创建
    18. cpn2:{
    19. template:`
    20. <div>
    21. <h2>局部组件语法糖h2>
    22. <p>局部组件语法糖p>
    23. div>`
    24. }
    25. }
    26. })
    27. script>

    二、组件模板的分离写法

    1.script标签

    ​ 使用script标签定义组件的模板,script标签注意类型是text/x-template

    1. <script type="text/x-template" id="cpn1">
    2. <div>
    3. <h2>组件模板的分离写法h2>
    4. <p>script标签注意类型是text/x-templatep>
    5. div>
    6. script>

    2. template标签

    ​ 使用template标签,将内容写在标签内。

    1. <template id="cpn2">
    2. <div>
    3. <h2>组件模板的分离写法h2>
    4. <p>template标签p>
    5. div>
    6. template>

    调用分离的模板,使用template:'#cpn1'

    1. <script src="../js/vue.js">script>
    2. <script>
    3. const app = new Vue({
    4. el: "#app",
    5. components: { //局部组件创建
    6. cpn1:{
    7. template:'#cpn1'
    8. },
    9. cpn2: {
    10. template: '#cpn2'
    11. }
    12. }
    13. })
    14. script>

    三、组件的数据

     1.存放问题

    ​前面说过vue组件就是一个vue实例,相应的vue组件也有data属性来存放数据。

    template中使用组件内部的数据msg

    1. <div id="app">
    2. <cpn1>cpn1>
    3. div>
    4. <script src="../js/vue.js">script>
    5. <script>
    6. const app = new Vue({
    7. el: "#app",
    8. components: { //局部组件创建
    9. cpn1:{
    10. template:'
      {{msg}}
      '
      ,
    11. data(){
    12. return {
    13. msg:"组件的数据存放必须要是一个函数"
    14. }
    15. }
    16. }
    17. }
    18. })
    19. script>

    2.组件的data为什么必须要是函数

    ​组件的思想是复用,定义组件当然是把通用的公共的东西抽出来复用。

    以下代码中定义了两个组件cpn1cpn2,都是定义了两个计数器,con1的data虽然使用了函数,但是为了模拟data:{count:0},使用了常量obj来返回count。

    1. <div id="app">
    2. <h2>data不使用函数h2>
    3. <cpn1>cpn1>
    4. <cpn1>cpn1>
    5. <hr>
    6. <h2>data使用函数h2>
    7. <cpn2>cpn2>
    8. <cpn2>cpn2>
    9. <hr>
    10. div>
    11. <script src="../js/vue.js">script>
    12. <template id="cpn1">
    13. <div>
    14. <button @click="count--">-button>
    15. 当前计数:{{count}}
    16. <button @click="count++">+button>
    17. div>
    18. template>
    19. <template id="cpn2">
    20. <div>
    21. <button @click="count--">-button>
    22. 当前计数:{{count}}
    23. <button @click="count++">+button>
    24. div>
    25. template>
    26. <script>
    27. const obj = {
    28. count:0
    29. };
    30. const app = new Vue({
    31. el: "#app",
    32. components: { //局部组件创建
    33. cpn1: {
    34. template: '#cpn1',
    35. data() {
    36. return obj;
    37. }
    38. },
    39. cpn2: {
    40. template: '#cpn2',
    41. data() {
    42. return {
    43. count: 0
    44. }
    45. }
    46. }
    47. }
    48. })
    49. script>

     图中可以看到,不使用函数data的好像共用一个count属性,而使用函数的data的count是各自用各自的,像局部变量一样有块级作用域,这个块级就是vue组件的作用域。

    我们在复用组件的时候肯定希望,各自组件用各自的变量,如果确实需要都用一样的,可以全局组件注册,也可以是用vuex来进行状态管理。

  • 相关阅读:
    java计算机毕业设计家教到家平台MyBatis+系统+LW文档+源码+调试部署
    C 函数指针
    【杂记-浅谈XSS跨站脚本攻击】
    接口调试工具概论
    通过 Canal 将 MySQL 数据实时同步到 Easysearch
    windows server 华夏ERP部署手册
    Java开发多年写过的BUG都在这了!!!(2022.8更新)
    关于http协议中的各种请求头、请求类型的作用以及用途
    锁机制总结
    搭建web网站
  • 原文地址:https://blog.csdn.net/yzq0820/article/details/126211431