组件化高级

2021/8/11 6:07:24

本文主要是介绍组件化高级,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • 插槽slot
    • 插槽的基本使用
    • 具名插槽的使用
    • 编译作用域
    • 作用域插槽:准备

插槽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>

效果:

正确:



这篇关于组件化高级的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程