Vue2下篇

 插槽:

基本插槽:

普通插槽:父组件向子组件传递静态内容。基本插槽只能有一个slot标签,因为这个是默认的位置,所以只能有一个

<!-- ParentComponent.vue -->
<template>
<ChildComponent>
<p>This is passed from parent</p>
</ChildComponent>
</template>

<!-- ChildComponent.vue -->
<template>
<div>
<slot></slot> <!-- 插槽位置 -->
</div>
</template>
命名插槽:

如果你希望在同一个子组件中传递多个内容,可以通过命名插槽来实现。命名插槽允许父组件向子组件传递不同的内容并指定插槽的位置。

<!-- ParentComponent.vue -->
<template>
<ChildComponent>
<template v-slot:header>
<h1>This is the header</h1>
</template>
<template v-slot:footer>
<p>This is the footer</p>
</template>
</ChildComponent>
</template>

<!-- ChildComponent.vue -->
<template>
<div>
<header><slot name="header"></slot></header> <!-- 命名插槽 -->
<main>Content of the child component</main>
<footer><slot name="footer"></slot></footer> <!-- 命名插槽 -->
</div>
</template>
作用域插槽:

作用域插槽(也叫做“作用域插槽”)是一种更强大的插槽功能,它让父组件能够通过插槽访问子组件的数据或方法。通过作用域插槽,父组件可以传递一个模板,并且可以访问子组件中的数据

<!-- 父组件 -->
<ListComponent :items="['Apple', 'Banana', 'Cherry']">
  <template v-slot:default="{ item }">
    <li>{
  
  { item }}</li>
  </template>
</ListComponent>

<!-- 子组件 -->
<template>
  <ul>
    <slot v-for="item in items" :item="item"></slot>
  </ul>
</template>

<script>
export default {
  props: {
    items: Array,
  },
};
</script>

路由:

1.router-link路由跳转:

<router-link :to="/find"> </router-link>  是 Vue Router 提供的组件,它的主要功能是实现 SPA(单页应用)中的路由导航。当用户点击 <router-link> 时,它不会像普通的<a href>标签那样触发页面的完全刷新而是通过 Vue Router 的内部机制,根据路由配置更新当前页面的部分内容,实现页面的局部更新,提供了更流畅的用户体验,避免了传统多页应用中页面跳转带来的白屏和加载延迟等问题。

可以方便地传递路由参数,例如<router-link :to="{name: 'user' ,params: {userId: 123}}">通过name属性和params对象,可以传递参数到目标路由,目标路由可以根据这些参数动态地显示相应内容。

 

使用路由查询传参的方法

1. 在 <router-link> 中使用查询参数

<router-link :to="{ path: '/user', query: { id: 123, name: 'John' }}">
用户信息
</router-link>

:to 是 Vue 的动态绑定语法,这里绑定的是一个对象。 

2.路由出口:

显示跳转页面的对应的组件显示部分

router-view是 Vue Router 提供的一个组件,用于显示当前路由对应的组件内容。当用户点击footer_warp中的 router-link 进行导航时,根据路由配置,对应的组件会在这里渲染。例如,如果用户点击发现音乐链接,路由会将/find路径对应的组件渲染到这个router-view中;如果点击我的音乐链接,会将/my路径对应的组件渲染到router-view中,以此类推。

 

使用动态数据作为 include 属性

<template>
  <keep-alive :include="keepArr">
    <router-view></router-view>
  </keep-alive>
</template>
<script>
export default {
  data() {
    return {
      keepArr: ['HomeComponent', 'AboutComponent']
    };
  }
};
</script>
  • 在这个示例中,keepArr 是一个数组,存储了需要被缓存的组件名称。
  • 可以动态地修改 keepArr 数组,例如通过方法添加或删除元素,来控制哪些组件被缓存。
  • 当 router-view 中的组件名称在 keepArr 数组中时,该组件会被 keep-alive 缓存,例如当路由切换到 HomeComponent 或 AboutComponent 时,这些组件会被缓存。
 3.route路由参数:
export default {
name: 'UserComponent',
created() {
// 获取查询参数
const id = this.$route.query.id;
const name = this.$route.query.name;
console.log(id, name);
}
};
 4.导入方式:

静态导入:

import User from '@/views/layout/user.vue';

这种导入方式是静态导入,在 JavaScript 文件加载时,这些模块会被立即导入。

缺点:会增加初始加载时间和包的大小。这是因为在这种情况下,初始的包会包含所有导入的模块和组件代码,即便其中某些组件可能不会被立即使用。

 

动态导入:

const Prodetail = () => import('@/views/prodetail');

这种导入方式是动态导入,使用函数调用 import(),它返回一个 Promise,会在函数被调用时才开始导入模块。

优点:可实现懒加载,减少初始包的大小,进而提高应用的初始加载速度,适用于一些不常用的页面或组件。能够根据用户的操作或路由导航动态加载模块,优化性能。

import Vue from 'vue'
import VueRouter from 'vue-router'
// 这个效果和后面加上login/index.uve是一样的
import Layout from '@/views/layout'
import Home from '@/views/layout/home.vue'
import Category from '@/views/layout/category.vue'
import Cart from '@/views/layout/cart.vue'
import User from '@/views/layout/user.vue'
import store from '@/store'

const Login = () => import('@/views/login')
const SearchIndex = () => import('@/views/search/index.vue')
const Pay = () => import('@/views/pay')
const Prodetail = () => import('@/views/prodetail')

Vue.use(VueRouter)

const router = new VueRouter({
  routes: [
    { path: '/login', component: Login },
    {
      path: '/',
      // 添加重定向
      redirect: '/home',
      component: Layout,
      children: [
        { path: '/home', component: Home },
        { path: '/category', component: Category },
        { path: '/cart', component: Cart },
        { path: '/user', component: User }
      ]
    },
    { path: '/pay', component: Pay },
    // 动态路由传参
    { path: '/prodetail/:id', component: Prodetail },
    { path: '/searchIndex', component: SearchIndex }

  ]
})
export default router

      重定向:

      { path: '/', redirect: '/home' }:当用户访问根路径 / 时,会自动重定向到 /home 路径。这里的重定向是静态的,因为重定向的目标是固定的 /home 路径,不会根据用户状态或其他条件而改变。

      导航守卫:

      每次跳转页面前触发,进行一下路由处理 

      // 所有的路由在真正被访问到之前(解析渲染对应组件前),都会先经过全局前置守卫
      
      // 全局前置导航守卫
      // to: 到哪里去,到哪里的路由信息对象(路径,参数)
      // from: 从哪里来,从哪里来的完整路由信息对像,(路径,参数)
      // next() 放行 放行到to要去的路径
      // next(路径) 进行拦截,拦截到next里面配置的路径
      
      // 定义一个数组,专门用户存放所有需要权限访问的页面
      const authUrls = ['/pay', '/myorder']
      router.beforeEach((to, from, next) => {
        const token = store.getters.token
      
        // 如果是非权限页面,直接放行
        if (!authUrls.includes(to.path)) {
          return next()
        }
      
        // 如果是权限页面
        if (token) {
          next() // 有 token 放行
        } else {
          // 无 token,跳转到登录页
          next('/login')
        }
      })
      
      

      自定义指令:

      局部自定义指令:

      directives: {...}:在组件的 directives 属性中注册自定义指令。

      'local-focus':自定义指令的名称,使用时为 v-local-focus

      <template>
        <div>
          <input v-local-focus type="text" />
        </div>
      </template>
      
      <script>
      export default {
        directives: {
          'local-focus': {
            inserted: function (el) {
              el.focus();
            }
          }
        }
      };
      </script>
      全局自定义指令:
      直接将指令定义在main.js文件当中
      Vue.directive('focus', {
        inserted: function (el) {
          el.focus();
        }
      });

       带有参数的指令:

      <!-- 使用带有普通参数的自定义指令 -->
      <input type="text" v-color:red>
      
      directives: {
               color: {
                      bind: function (el, binding) {
                         // 获取参数
                         const color = binding.arg; 
                         el.style.color = color;
                        }
                      }
                  }

      本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/959355.html

      如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

      相关文章

      【Unity3D】aab包太大无法上传Google问题

      目录 一、勾选Split Application Binary&#xff0c;Unity直接打aab包 勾选Split Application Binary选项的影响 不勾选Split Application Binary选项的影响 总结 2、导出Android工程打包aab 一、勾选Split Application Binary&#xff0c;Unity直接打aab包 超出150MB部分…

      第6章 数据结构—列表与列表项讲解--总结

      整理 野火 《FreeRTOS 内核实现与应用开发实战指南》—基于野火 STM32 全系列&#xff08;M3/4/7&#xff09;开发板 文章目录 第6章 数据结构—列表与列表项讲解--总结6.1 C 语言链表简介6.1.1 单向链表6.1.2 双向链表6.1.3 链表与数组的对比 6.2 FreeRTOS 中链表的实现6.2.1 …

      强化学习-Deep Q Network

      文章目录 Deep Q Networkzip(*batch)的内部实现假设&#xff1a;结果&#xff1a; Deep Q Network 这种方式很适合格子游戏。因为格子游戏中的每一个格子就是一个状态&#xff0c;这是离散的&#xff0c;但在现实生活中&#xff0c;很多状态并不是离散而是连续的。所以我们可以…

      C语言-构造数据类型

      1、构造数据类型 结构体、共用体、枚举。 2、结构体 1、结构体的定义 结构体是一个自定义的复合数据类型&#xff0c;它允许将不同类型的数据组合在一起。 struct 结构体名 {数据类型1 成员变量1;数据类型2 成员变量2;数据类型3 成员变量3;数据类型4 成员变量4; } 2、结构体变…

      FPGA实现任意角度视频旋转(二)视频90度/270度无裁剪旋转

      本文主要介绍如何基于FPGA实现视频的90度/270度无裁剪旋转&#xff0c;旋转效果示意图如下&#xff1a; 为了实时对比旋转效果&#xff0c;采用分屏显示进行处理&#xff0c;左边代表旋转前的视频在屏幕中的位置&#xff0c;右边代表旋转后的视频在屏幕中的位置。 分屏显示的…

      Spark/Kafka

      文章目录 项目地址一、Spark1. RDD1.1 五大核心属性1.2 执行原理1.3 四种创建方式二、Kafka2.1 生产者(1)分区器(2)生产者提高吞吐量(3) 生产者数据可靠性数据传递语义幂等性和事务数据有序2.2 Broker(1)Broker工作流程(2)节点服役和退役2.3 副本(1)Follower故障细…

      win32汇编环境,函数的编写与调用、传值或返回值等

      ;运行效果 ;win32汇编环境,函数的编写与调用、传值或返回值等 ;函数在被调用的时候&#xff0c;如果此函数实体在前面&#xff0c;可以不用声明。如果实体在后面&#xff0c;则需要先声明。类似于下面的DlgProc函数&#xff0c;因为它的实体在后面&#xff0c;所以需要在调用之…

      [Spring] Gateway详解

      &#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

      回顾2024,展望2025

      项目 LMD performance phase2 今年修修补补&#xff0c;设计和做了很多item&#xff0c;有时候自己都数不清做了什么大大小小的item&#xff0c;但是for LMD performance phase2的go-live确实是最大也是最难的了&#xff0c;无论什么系统&#xff0c;只要用的人多了&#xff…

      旅游风景的代码项目

      敦煌莫高窟&#xff1a;用代码打开千年艺术的大门 ——一个零基础也能看懂的神奇项目 前言&#xff1a;当古老艺术遇上现代代码 想象一下&#xff0c;你坐在电脑前&#xff0c;指尖轻轻一点&#xff0c;就能穿越到敦煌莫高窟——看飞天的衣袂飘飘、听千年的驼铃声声。这不是科…

      解决lombok注解失效

      问题描述 当出现使用lombok的注解, 但是找不到符号, 或者使用Getter注解却获取不到属性值 就像下面这样 原因: 新版本lombok自动引入了一个插件, 将下面这串代码删除后, 刷新并清除缓存即可解决

      leetcode hot 100 搜索二维矩阵II

      编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,2…

      CentOS7安装使用containerd

      一&#xff0c;安装 1.1、安装containerd 下载 https://github.com/containerd/containerd/releases/download/v1.7.24/cri-containerd-cni-1.7.24-linux-amd64.tar.gz wget https://github.com/containerd/containerd/releases/download/v1.7.24/cri-containerd-cni-1.7.24-…

      easyexcel读取写入excel easyexceldemo

      1.新建springboot项目 2.添加pom依赖 <name>excel</name> <description>excelspringboot例子</description><parent> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId&…

      2025数学建模美赛|F题成品论文

      国家安全政策与网络安全 摘要 随着互联网技术的迅猛发展&#xff0c;网络犯罪问题已成为全球网络安全中的重要研究课题&#xff0c;且网络犯罪的形式和影响日益复杂和严重。本文针对网络犯罪中的问题&#xff0c;基于多元回归分析和差异中的差异&#xff08;DiD&#xff09;思…

      QT QTableWidget控件 全面详解

      本系列文章全面的介绍了QT中的57种控件的使用方法以及示例,包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizontalSpacer)、…

      SpringBoot--基本使用(配置、整合SpringMVC、Druid、Mybatis、基础特性)

      这里写目录标题 一.介绍1.为什么依赖不需要写版本&#xff1f;2.启动器(Starter)是何方神圣&#xff1f;3.SpringBootApplication注解的功效&#xff1f;4.启动源码5.如何学好SpringBoot 二.SpringBoot3配置文件2.1属性配置文件使用2.2 YAML配置文件使用2.3 YAML配置文件使用2.…

      QT TLS initialization failed

      qt使用QNetworkAccessManager下载文件&#xff08;给出的链接可以在浏览器里面下载文件&#xff09;&#xff0c;下载失败&#xff0c; 提示“TLS initialization failed”通常是由于Qt在使用HTTPS进行文件下载时&#xff0c;未能正确初始化TLS&#xff08;安全传输层协议&…

      WebODM之python实现

      1、安装webodm_slam 主要是了解API文档,查看之前的文章 安装WebODM_slate 2、安装webodm 查看之前的文章 Win10安装WebODM和操作全流程 3、python脚本 项目案例 This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of…

      GitLab配置免密登录和常用命令

      SSH 免密登录 Windows免密登录 删除现有Key 访问目录&#xff1a;C:\Users\Administrator\ .ssh&#xff0c;删除公钥&#xff1a;id_rsa.pub &#xff0c;私钥&#xff1a;id_rsa 2.生成.ssh 秘钥 运行命令生成.ssh 秘钥目录&#xff08; ssh-keygen -t rsa -C xxxxxx126.…