Vue_插槽语法基础

Vue: P 70——>插槽语法及前端模块化

70_插槽的基本使用

在子组件内添加插槽增加组件的可拓展性

   <template id="cpn">
       <div>
           <h2>组件</h2>
           <p>定义组件模板</p>
           <slot><button>默认值</button></slot>
           <!-- 当插槽没有传值时默认传 Solt 内的值 -->
       </div>
   </template>

当 slot 没有默认值时传入默认值,当:

   <div id="app">
      <cpn><button>插槽按钮</button></cpn>
      <cpn><span>插槽 span</span></cpn>
      <cpn><p>插槽 p 字段</p></cpn>
      <cpn>
          <p>而当插槽内有多个元素时</p>
          <div> 插槽会将所有元素全部都展示出来</div>
      </cpn>
   </div>

传入父组件的值.在 Vue 实例中进行注册,当有多个元素时多个元素都会展示。

   const app = new Vue({
   el: '#app',
   data: {
      message: '你好啊'
   },
   components: {
       cpn: {
           template: '#cpn'
       }
   }
})

在这里插入图片描述


71_具名插槽的使用

使用 name 绑定子组件

   <template id="cpn">
       <div>
          <slot></slot>
          <!-- 父组件传值只会替换没有 name 值的 slot -->
          <slot name="left"><span>左边</span></slot>
          <slot name="center"><span>中间</span></slot>
          <slot name="right"></slot><span>右边</span></slot>
       </div>
   </template>

在父组件中替换即可

   <div id="app">
      <cpn>
         <span slot="center">
            <!-- 判断 name 相同则替换 -->
            标题
         </span>
      </cpn>
   </div>

72_编译作用域

组件的作用域对应的组件,父组件的元素不影响子组件

组件编译作用域的概念

使用插槽展示数据:

   components: {
       cpn: {
           template: '#cpn',
           data() {
               return {
                   planguages: ['one','two','three','four','five','six']
               }
           }
       }
   }

在子组件中对数据进行获取:

   <template id="cpn">
       <div>
           <!-- 获取子组件的 planguages-->
           <slot :data="planguages">
               <!-- 将展示的格式封装成插槽 -->
           <ul>
              <li v-for="item in planguages">{{item}}</li>
          </ul>              
           </slot>
       </div>
   </template>

在父组件中进行不同格式的展示:

   <div id="app">
      <cpn></cpn>

      <cpn>
        <template slot-scope="slot">
            <!-- <span v-for="item in slot.data">{{item}} -</span> -->
            <span>{{slot.data.join(' _ ')}}</span>
            <!-- data数据取决于子组件 slot 插槽中定义的值-->
            <!-- .join添加每个值之间的间隔符号 -->
        </template>
    </cpn>

      <cpn>
          <template slot-scope="slot">
              <span v-for="item in slot.data">{{item}} *</span>
          </template>
      </cpn>
   </div>

.join 在展示的每条数据中插入间隔符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值