首页 > 其他分享 >vue3

vue3

时间:2024-04-03 10:56:40浏览次数:27  
标签:slot 插件 板件 vue3 nav 插槽 组件

  • [ slot 插槽 ]
  • [ slot 有什么用? ]
    • 为了复用,在开发过程中,会产生很多组件,组装这些组件会形成一个树形结构。
    • 如果组件嵌套层数过多,过于零碎,不利于开发和维护。
    • slot 插槽的作用,就是讲组装过程扁平化,比如有三级组件,正常需要在一级组件中嵌入二级组件,在二级组件中嵌入三级组件。而有了插槽,则都可以在一级组件中完成装配。即在一级组件中嵌入二级组件,然后将三级组件插入二级组件的插槽。
    • slot 插槽同时也相当于将组件之间进行了解耦。同样一个 header 组件,里面放一个插槽,在正常页面的时候,把导航组件插到里面,而在登陆和注册页面,不插入导航组件即可。这样就不需要准备两套 header 组件。更加灵活。
    • 那 slot 组件到底是什么呢?其实就是向组件内部传递组件。在板组件中可能会放置其他组件的地方预留插槽位置,然后在使用板组件的时候,把需要插入到板组件上的组件放入板组件的标签内部即可,多个插槽的时候做好命名即可。
      import HeaderView from ...
      import NavView from ...
      <template>
        <header-view>
          <nav-view></nav-view> // 插入插槽
        </header-view>
      </template>
        <header>
          // logo ...
          <slot></slot> // 预留插槽
        </header>
      // HeaderView.vue
    
    
      import HeaderView from ...
      import NavView from ...
      <template>
        <header-view>
          <template #nav> // 插入到 nav 插槽
            <nav-view></nav-view> // 插入插槽
          </template>
        </header-view>
      </template>
        <header>
          // logo ...
          <slot name="nav"></slot> // 预留 nav 插槽
        </header>
      // HeaderView.vue
    
    

  • [ 数据传递 ]
    • 官方在讲这里的时候有点绕,简单来说,这里涉及到三方(机体,板件,插件)之间的数据传递,插件是插入到板件上的组件,板件是安装到机体上的组件。
    • 板件是安装到机体上的组件,所以在安装的时候,可以通过 props 的方式将机体的部分数据传入到板件内部,
    • 插件是在机体上插入到板件中的,所以这里也可以通过props的方式将机体的部分数据传递给插件。
    • 从实际最终结构上来说,插件应该是板件的子组件,那么问题来了,插件怎么获得板件内部的部分数据呢?因为父组件是无法直接获得子组件的数据的,这里机体拿不到板件内部数据,也就无法中转给插件。
    • 官方提供了 v-slot 的方式来将数据传递,在前面的案例中,我们使用了 #nav 来在板件上指定要插入那个插槽,这里的 #nav 就是 v-slot="nav" 的简写。
    • 通过 #nav="obj" 的方式就可以接受板件内部传递过来的值. 在板件内部的插件接口上,通过属性的方式将值传递给插件即可。
    • 这时候在机体内部,我们已经通过 #nav="obj" 的方式拿到板件暴露给我们的数据对象 obj 了,然后通过 props 的方式传递给插件即可,插件内部就可以获得板件内部暴露出来的部分数据了。
      // 插件
    <script setup>
      const props = defineProps({
        nav: {
          type: Array,
          default: ([])
        }
      })
    </script>
    <template>
      <a
        v-for="(link, index) of nav"
        :key="index"
        :href="`/${link}`"
      >{{ link }}</a>
    </template>
    // 板件
    <script setup>
      const nav=['home', 'product']
    </script>
    <template>
      <header>
        <p>Welcome</p>
        <hr>
        <slot name="nav" :nav="nav"></slot>
      </header>
    </template>
    
    // 机体
    <script setup>
      import HeaderVue from './components/HeaderVue'
      import NavVue from './components/NavVue'
    </script>
    <template>
      <header-vue>
        <template #nav="{ nav }">
          <nav-vue :nav="nav"></nav-vue>
        </template>
      </header-vue>
    </template>
    

    标签:slot,插件,板件,vue3,nav,插槽,组件
    From: https://www.cnblogs.com/anch/p/18112194

    相关文章

    • 从零实现vue3核心源码 day1
      1.声明式框架Vue3依旧是声明式的框架,用起来简单。命令式和声明式区别早在JQ的时代编写的代码都是命令式的,命令式框架重要特点就是关注过程声明式框架更加关注结果。命令式的代码封装到了vue.js中,过程靠vue.js来实现声明式代码更加简单,不需要关注实现,按照要求填代码就可......
    • Java登陆第三十六天——VUE3响应式入门、setup语法糖
      当浏览器接收到服务端返回的页面后,浏览器会把页面解析成DOM树,DOM树中各个元素会相应的显示在浏览器上。VUE提供的响应式数据可以在页面不刷新的情况下更新数据。响应式数据App.vue<script>//等价于setup语法糖。固定的写法,不会改。exportdefault{setup(){letsum......
    • Java登陆第三十六天——VUE3引入CSS
      在一个.Vue文件中,通常包括以下三部分。<template><style><script>.vue中部分传统部分描述<template>HTML代替传统的.html文件<style>CSS代替传统的.js文件<script>JS代替传统的.css文件声明内部的CSS在.Vue文件中,style标签声明CSS。Hello......
    • Vue3初识
      Vue3初识vue.js是什么vue是什么?官网首页就有答案:渐进式JavaScript框架。有灵活,易用,高效的特点。官网首页有详细的介绍:v2:https://cn.vuejs.org/v2/guide/V3:https://vuejs.org/V3中文:https://cn.vuejs.org/V3中文2:https://staging-cn.vuejs.org/如何理解渐进式个......
    • vue3+ant-design-vue - 最新实现“侧边动态导航栏+面包屑导航“功能,vue3+ant后台管理
      效果图在vue3+antdesignvue后台管理系统中,详细完成菜单导航+面包屑动态联动功能效果,支持缓存功能、配置简洁、自动跟随route路由进行变化、自动匹配菜单和面包屑导航的文字等,超详细实用的示例demo全部源代码。提供详细示例源代码,新手小白直接复制稍微改下配置就能用了,快......
    • vue3 点击复制
      npminstallclipboard--save//下载importClipboardfrom'clipboard'//使用页面引入js:constcopyText=async()=>{consttext=window.location.href//设置要复制的文本letclipboard=newClipboard('.buttoncopy',{text:()=>......
    • Vue3集成wangeditor5
      参考连接https://www.wangeditor.com/v5/for-frame.html#使用-1效果图相关依赖<template> <div> <divstyle="border:1pxsolid#ccc;margin-top:10px"> <Toolbar :editor="editorRef" :defaultConfig="toolbarConfig......
    • vue3+ts项目配置别名
      说明在项目开发中,需要通过配置别名来方便开发读取文件目录。配置文件vite.config.jsimport{defineConfig}from'vite'importvuefrom'@vitejs/plugin-vue'import{resolve}from"path";constpathSrc=resolve(__dirname,"src");exportdefault......
    • Vue3连接mqtt订阅消息
      Vue3中使用以及订阅没有安装可使用npminstallmqtt--save(暂时使用了[email protected])页面引入引用mqtt库不要直接引用mqtt会报错importmqttfrom'mqtt/dist/mqtt'代码:1.获取动态配置(关于mqtt的动态配置)<script>////引入mqttimportmqttfrom"mqt......
    • Vue2 和 Vue3 中的 v-model 的区别#记录
      vue3对v-model的语法进行了改动。vue2中有两种方式实现数据的双向绑定(组件与外部数据的双向绑定),一种是使用v-model,另一种是使用v-bind.sync修饰符。vue2中的v-model,主要是进行value属性的绑定和input事件的派发。<ChildComponentv-model="pageTitle"/>//等价于<Child......