首页 > 其他分享 >vue-动态组件、插槽

vue-动态组件、插槽

时间:2023-09-20 11:12:14浏览次数:39  
标签:vue 插槽 var 首页 template 组件 home

动态组件

方法一:笨方法-切换组件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
    <button @click="who='home'">首页</button>
    <button @click="who='goods'">商品</button>
    <button @click="who='order'">订单</button>
    <hr>
    <home v-if="who=='home'"></home>
    <goods v-else-if="who=='goods'"></goods>
    <order v-else></order>
</div>
</body>
<script>
    var home = {
        template: `<div>
        <h4>首页</h4>
        </div>`,
    }
    var goods={
         template: `<div>
        <h4>商品页面</h4>
        </div>`,
    }
    var order={
         template: `<div>
        <h4>订单页面</h4>
        </div>`,
    }
    var vm = new Vue({
        el: '#app',
        data: {
            who:'home'
        },
        components: {
            home,
            goods,
            order
        }
    })
</script>
</html>

 

 方法二:动态组件:使用component标签来实现组件之间的切换

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
     <button @click="who='home'">首页</button>
    <button @click="who='goods'">商品</button>
    <button @click="who='order'">订单</button>
    <hr>
<!--使用动态组件:component标签来进行组件的切换:who是那个字符串,就显示哪个组件-->
    <component :is="who"></component>
<!--    component标签的is属性等于哪个组件名字,这里就会显示哪个组件-->
</div>
</body>
<script>
     var home = {
        template: `<div>
        <h4>首页</h4>
        </div>`,
    }
    var goods={
         template: `<div>
        <h4>商品页面</h4>
        </div>`,
    }
    var order={
         template: `<div>
        <h4>订单页面</h4>
        </div>`,
    }
    var vm=new Vue({
        el:'#app',
        data:{
            who:'home'
        },
        components:{
            home,
            goods,
            order
        }
    })
</script>
</html>

 who属性:

 

keep-alive的使用

当我们从一个组件切换到另一个组件的时候,当前这个组件会被销毁。

keep-alive标签,可以帮助我们缓存当前组件,当切到别的组件时,当前组件不会被销毁

小案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
    <button @click="who='home'">首页</button>
    <button @click="who='goods'">商品</button>
    <button @click="who='order'">订单</button>
    <hr>
    <!--使用动态组件:component标签来进行组件的切换:who是那个字符串,就显示哪个组件-->
    <!-- keep-alive:当前组件会缓存在这,后期切到另一个组件上的话,当前组件不会销毁   -->
    <Keep-alive>
        <component :is="who"></component>
    </Keep-alive>
    <!--    component标签的is属性等于哪个组件名字,这里就会显示哪个组件-->
</div>
</body>
<script>
    var home = {
        template: `<div>
        <h4>首页</h4>
        </div>`,
    }
    var goods = {
        template: `<div>
        <h4>商品页面</h4>
        <p>搜索商品:<input type="text" v-model="name"><button @click="handleSearch">搜索</button></p>
        </div>`,
        data(){
            return {
                name:'',
            }
        },
        methods:{
            handleSearch(){
                alert(this.name)
            }
        }
    }
    var order = {
        template: `<div>
        <h4>订单页面</h4>
        </div>`,
    }
    var vm = new Vue({
        el: '#app',
        data: {
            who: 'home'
        },
        components: {
            home,
            goods,
            order
        }
    })
</script>
</html>

当没有keep-alive标签包裹时:

 结果:

 当切换到首页时,在切回商品组件时:

 当使用keep-alive标签时:

当切换到首页时,在切回商品组件时:

 

插槽

  一般情况下,编写完一个组件之后,组件的内容都是写死的,需要加数据,只能去组件中修改,扩展性很差。

  然后就出现了插槽这个概念,只需要在组件中添加<slot></slot>,就可以在body的组件标签中添加内容

1.不具名插槽:

使用步骤:

 -1. 在组件的html的任意位置,放标签<slot></slot>

 -2. 后期在父组件中使用该组件时:

  比如:局部组件hh

  <hh>

  写自己需要的内容

  </hh>

 -3. 放的内容,就会被渲染到slot标签中

小案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
    <hh>
        <div>
            <h4>看帅哥</h4>
        </div>
    </hh>
    <hr>
    <hh>
        <img src="666.png" alt="" height="400px">
    </hh>
</div>
</body>
<script>
     var hh = {
        template: `<div>
        <h4>我是一个组件</h4>
        <slot></slot>
        <h5>我是组件内部的h5</h5>
        </div>`,
    }
    var vm=new Vue({
        el:'#app',
        data:{
            who:'home'
        },
        components:{
            hh,
        }
    })
</script>
</html>

结果:

 

2. 具名插槽

使用步骤:

 -1. 组件中可以留多个插槽,给插槽命名:

  比如:

    <div>

      <h1>我是一个组件</h1>

      <slot name="middle"></slot>

      <h2>我是组件内部的h2</h2>

      <slot name="footer"></slot>

    </div>

 -2. 在父组件中使用该组件时,可以指定该组件内的某个标签渲染到哪个插槽上

   比如:

    <hh>

      <div slot="footer">

        我是div

      </div>

      <img src="666.jpg" alt="" slot="middle">

      </hh>

小案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
    <hh>
        <div slot="footer">
            我是div
        </div>
        <img  src="666.png" alt="" height="400px" slot="middle">
    </hh>

</div>
</body>
<script>
     var hh = {
        template: `<div>
        <h4>我是一个组件</h4>
        <!--  放在组件的中间      -->
        <slot name="middle"></slot>
        <h5>我是组件内部的h5</h5>
        <!--  放在组件的尾部      -->
        <slot name="footer"></slot>
        </div>`,
    }
    var vm=new Vue({
        el:'#app',
        data:{
            who:'home'
        },
        components:{
            hh,
        }
    })
</script>
</html>

 

结果:

 

标签:vue,插槽,var,首页,template,组件,home
From: https://www.cnblogs.com/Lucky-Hua/p/17716791.html

相关文章

  • Vue-入门vue,及第一个vue程序
    一.初始Vue什么是vueVue(发音为/vjuː/,类似 view)是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue都可以胜任。vue的架构vue是可以独......
  • Vue+Node连接MySql搭建项目
    https://haoying.blog.csdn.net/article/details/123660641?spm=1001.2014.3001.5506https://www.jb51.net/article/277499.htm ......
  • vue-cli-service electron:serve zsh: command not
    vue-cli-serviceelectron:servezsh:commandnotfound:vue-cli-service尝试一进入项目清除缓存npmcacheclean--force重新安装npminstall尝试二npminstall-gelectron-buildernpminstall尝试三sudorm-rfnode_modulespackage-lock.json&&npminstall这......
  • Vue学习八:vue3
    一、vue3创建项目与介绍vue3创建项目与vue2使用vue-cli(基于webpack)脚手架不同,vue3使用create-vue(基于vite,更快)。创建项目的指令如下,首先看一下node的版本(node-v),16以上才支持。第一次创建项目会去下载create-vue比较慢,等一会就好了。npminitvue@latest然后关掉命令行,重新......
  • 14-Vue核心-列表渲染
    使用v-for做列表渲染我们可以用 v-for 指令基于一个数组来渲染一个列表,用于展示列表数据。语法:v-for="(item,index)initems" :key="xxx"或者 v-for="(item,index)ofitems" :key="xxx" 这里可以使用 of 替代 in 作为分隔符,因为它更接近JavaScript迭......
  • Vue3 watch揭秘:基本用法与原理深度解析
    Vue3中的watch函数用于监听数据的变化,当数据发生变化时,可以执行一些操作。watch函数的基本用法如下:import{ref,watch}from'vue';exportdefault{setup(){constcount=ref(0);watch(count,(newValue,oldValue)=>{console.log(`count的新值为:${......
  • vue_vueRouter同组件跳转失败
    目录场景再现资料查询解决场景再现现有一个Article页面,通过/article/:id来匹配不同的文章页面,当我需要实现跳转到上一篇或下一篇时,即从/article/:id跳转另一个/article/:id时,发现浏览器中只有地址变化了,但是页面的很多组件,包括文章内容都没有刷新,资料查询这......
  • 天合光能分布式组件如何?210至尊N型组件创领光伏7.0时代
    在能源转型、建设新型能源体系的当下,“光伏+”成为“十四五”规划的重点,正在加速赋能千行百业、走进千家万户,即将迎来蓬勃发展的新时代。在此背景下,8月30日,能源发展网和中国改革报《能源发展》周刊联合国家级能源智库,在北京举办第六届光伏+创新发展论坛,邀请专家、学者、企业家......
  • Vue之与后端交互的三种方式、显示小电影案例、计算属性、监听属性、Vue生命周期、组件
    与后端交互的三种方式后端写了一堆接口前段会了前后端要打通===》从前端发送ajax===》核心:用js发送http请求,接收返回原生js,可以开启可以开启ajax,但是原生js开启,比较麻烦,需要做浏览器兼容,有坑(基本不写)jq,写了个兼容所有浏览器的$.ajax(),不仅仅有ajax,还封装了很多d......
  • 天合光能210组件累计出货量超75GW,光储融合引领智慧能源升级
    8月29日晚间,天合光能披露2023年半年度报告(下简称“报告”),今年上半年,天合光能组件出货27GW;截至同期,天合光能组件累计出货超150GW,其中210组件累计出货量超75GW。210+N型技术、产品领先布局、产能全面上扬。此外,支架业务出货3.3GW,分布式系统业务出货4.5GW,储能出货同比增加超过200%......