vue教程——09 组件化进阶

一 slot-插槽的基本使用。

插槽的具体作用:在组件内部,定制化自己喜欢的内容。

二 插槽的具体用法

具名插槽

可以让插槽按指定的顺序填充,而没有具名的插槽是按照你填充的顺序排列的,而具名插槽可以自定义排列
<!-- 父组件 -->
  <div id="app">

    <cpn>
      <span>没具名</span>
      <span slot="left">这是左边具名插槽</span>
      <!-- 新语法 -->
      <template v-slot:center>这是中间具名插槽</template>
      <!-- 新语法缩写 -->
      <template #right>这是右边具名插槽</template>
    </cpn>


  </div>

  <!-- 插槽的基本使用使用<slot></slot> -->
  <!-- 子组件 -->
  <template id="cpn">
    <div>
      <slot name="left">左边</slot>
      <slot name="center">中间</slot>
      <slot name="right">右边</slot>
      <slot>没有具名的插槽</slot>
    </div>
  </template>

  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>

  <script>
    const cpn = {
      template: "#cpn",
      data() {
        return {
   
        }
      },
    }
    const app = new Vue({
      el: "#app",
      data() {
        return {
         
        }
      },
      components: {
        cpn
      },
    })
  </script>
结论:

1 定义具名插槽,使用`name`属性,给插槽定义一个名字。

2 使用具名插槽,在自定义组件标签内使用`slot="left"`,插入指定插槽

3 三种写法,获取指定插槽。

三 组件的作用域

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>组件的作用域</title>
</head>
<body>
  <!-- 父组件 -->
  <div id="app">
    <!-- 使用的vue实例作用域的isShow -->
    <cpn v-show="isShow"></cpn>
  </div>
<!-- 插槽的基本使用使用<slot></slot> -->
  <!-- 子组件 -->
  <template id="cpn">
    <div>
      <h2>子组件</h2>
      <!-- 组件作用域,使用的子组件的作用域 -->
      <button v-show="isShow"></button>
    </div>
  </template>

  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>

  <script>
    const cpn = {
      template: "#cpn",
      data() {
        return {
          isShwo:false
        }
      },
    }
    const app = new Vue({
      el: "#app",
      data() {
        return {
          message: "父组件",
          isShow:true
        }
      },
      components: {
        cpn
      },
    })
  </script>
</body>

</html>

四 作用域插槽案例 v-slot

作用域插槽具体用法是干啥的?
请看:https://blog.csdn.net/qwq1503/article/details/105092342/

简单总结一下文章所写

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>作用域插槽案例</title>
</head>

 <div id="root">
        <child></child>
        <child></child>
    </div>
    <script>
        Vue.component('child',{
            data: function(){
                return {
                    list:[1,2,3,4]
                }
            },
            template: '<div><ul><li v-for="value in list">{{value}}</li></ul></div>',
        })
        var vm=new Vue({
            el: '#root'
        })
    </script>

</html>
调用两遍子组件,显示的值肯定是一样的

调用了两次child组件,因为调用的是同一个子组件,所以显示的内容完全一样。如何在每次调用时能有各自的渲染效果?这就是作用域插槽的用武之地。

<div id="root">
        <child>
            <template v-slot:testslot="scope"><!--定义一个插槽,该插槽必须放在template标签内-->
                <li>{{scope.value}}</li> <--!定义使用渲染方式-->
            </template>
        </child>
        <child>
            <template v-slot:testslot="scope">
                <h1>{{scope.value}}</h1><!--定义不同的渲染方式-->
            </template>
        </child>
    </div>
    <script>
        Vue.component('child',{
            data: function(){
                return {
                    list:[1,2,3,4]
                }
            },
            template: `<div>
                            <ul>
                                <slot name = "testslot"  v-for="value in list" :value=value>//使用slot占位
                                </slot>
                            </ul>
                        </div>`
        })
        var vm=new Vue({
            el: '#root'
        })
    </script>


 总结:由于组件有作用域,父组件有父组件的作用域,子组件也是,所以数据在不传值的情况下,是不互通的。
 
 这样,每次复用的子组件都一模一样,没法达到各自渲染的效果。
 
 这时,用插槽作用域可以解决这个问题,可以在父组件的地方,获取到子组件的数据,重新渲染。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue全家桶之组件开发是指使用Vue.js(一个用于构建用户界面的渐进式框架)以及其周边生态工具,如Vue Router和Vuex等,进行组件开发。 组件开发是一种将界面拆分成独立且可重用的组件的开发方式。Vue.js支持编写和使用组件,使得开发者可以将一个大型的应用程序拆分成小的、功能独立的组件来管理,从而更好地组织代码、提高代码的可维护性和重用性。 在Vue全家桶中,通过Vue.js可以轻松地创建组件,然后使用Vue Router管理不同组件之间的路由,实现单页应用的页面切换和导航。同时,使用Vuex可以进行状态管理,将共享的数据存储在store中,并通过各组件之间的通信来实现数据的同步和共享。 使用Vue全家桶进行组件开发有以下好处: 1. 提高开发效率:通过组件的方式,可以将一个大型应用拆分成小的组件,每个组件专注于自己的功能,降低了开发的复杂度,提高了开发效率。 2. 提高代码的可维护性:组件开发使得代码模块,每个组件都是相对独立的,易于维护和修改。同时,组件之间通过Props和Events进行通信,降低了组件间的耦合度。 3. 提高代码的复用性:组件开发使得组件可以在不同的项目中被重用,减少了冗余的代码编写,提高了代码的复用性和可扩展性。 总之,Vue全家桶的组件开发使得开发者可以更好地组织和管理代码,提高开发效率和代码的可维护性,同时促进代码的复用和扩展。对于大型项目或需要频繁更新迭代的项目来说,采用组件开发是一个明智的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值