ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

组件化高级

2021-08-11 02:00:15  阅读:202  来源: 互联网

标签:cpn 作用域 插槽 app 高级 组件 data


目录

插槽slot

  • 在原来的功能上具有扩展性

  • 组件的插槽:

    • 组件的插槽为了让我们封装的组件更加的具有扩展性

    • 让使用者可以决定组建内部的一些内容到底展示什么

  • 如何去封装这些组件?抽取共性,保留不同

    • 最好的封装方式就是将共性抽取到组件中,将不同暴露为插槽

    • 一旦我们预留了插槽,就可以让使用者根据自己的需求,决定插槽中插入什么内容

    • 是搜索框,还是文字,还是菜单,都由调用者自己来决定

插槽的基本使用

  1. 插槽的基本使用:
  2. 插槽的默认值:< button>按钮
  3. 如果有多个值,同时放入到组件进行替换,一起作为替换元素

具名插槽的使用

指定slot的name,并在引用组件的时候给定是哪一个插槽

<div id="app">
  <cpn>
    <button slot="left"><</button>
    <span slot="center">标题</span>
    <button slot="right">···</button>
  </cpn>
</div>

<template id="cpn">
  <div>
    <slot name="left"><span>左边</span></slot>
    <slot name="center"><span>中间</span></slot>
    <slot name="right"><span>右边</span></slot>
  </div>
</template>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊'
    },
    components: {
      cpn: {
        template: `#cpn`
      }
    }
  })
</script>

编译作用域

  • 官方给出了一条准则:父组件模板的所有东西都会在父级作用域内编译;子组件模板的所有东西都会在子级作用域内作用域内编译
<div id="app">
  <!-- 这里是可以显示的,因为这个cpn属于app在Vue实例中 -->
  <cpn v-show="isShow"></cpn>
</div>

<template id="cpn">
  <div>
    <h2>我是子组件</h2>
    <p>我是内容,哈哈哈</p>
    <!-- 这里不能显示,因为这个isShow属于组件,在作用域里查找isShow为false -->
    <button v-show="isShow">按钮</button>
  </div>
</template>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊',
      isShow: true
    },
    components: {
      cpn: {
        template: `#cpn`,
        data() {
          return {
            isShow: false
          }
        }
      }
    }
  })
</script>

作用域插槽:准备

  • 用一句话做一个总结,然后在后续的案例中体会:
    • 父组件替换插槽的标签,但是内容由子组件来提供

例:想让父组件换一种格式输出,但是拿不到子组件中的值

<div id="app">
  <cpn></cpn>
  <cpn>
    <!--目的是获取子组件中的pLanguages-->
    <spn v-for="item in pLanguages">
      {{item}} -
    </spn>
  </cpn>
</div>

<template id="cpn">
  <div>
    <slot>
      <ul>
        <li v-for="item in pLanguages">
          {{item}}
        </li>
      </ul>
    </slot>
  </div>
</template>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊'
    },
    components: {
      cpn: {
        template: `#cpn`,
        data() {
          return {
            pLanguages: ['JavaScript', 'C++', 'Java', 'C#', 'Python', 'Go', 'Swift']
          }
        }
      }
    }
  })
</script>

效果:

正确:

标签:cpn,作用域,插槽,app,高级,组件,data
来源: https://www.cnblogs.com/coderElian/p/15126511.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有