vue项目第五天

news2024/10/3 0:25:31

历史记录组件触发 连带menu组件路由同步

修改菜单 默认激活的路由。

历史记录路由如果当前路由在最后一个位置,删除则自动向前移位。

解决第一个小bug,点击tab高亮之后路由不跳

点击最后一个tab删除,修改了menuid,同步路由跳转

点击删除将tab删空,让导航跳转到系统首页

分析项目路由界面的结构


三部分组成

1.form表单
2.table表格数据
3.数据分页

封装form表单组件 (封装一个公共的,谁用谁调用)


在components下面创建一个formtab.vue组件,这个组件中是对 elementui的二次封装,然后在页面展示组件的view文件中都可以进行调用

整体思路

1.就是先创建公共组件里面写了一些公共的东西,比如input啊,之类的,

2.然后在这个公共组件上写一个局部作用域插槽(作用域插槽插槽就是给具名插槽绑定一个属性,然后在

3.使用它的页面组件中通过name.变量来接收。),

4.通过这个作用域去把不同的页面组件,中的不同的部分,放到这里,

5.然后把这个封装的公共组件,引入到需要用到它的页面组件中使用即可,

6.上方写一些判断条件,比如什么情况下用的是input什么情况下用的是select等等

要利用组件中父传子的方法props传值。

export default {
     // 定义props约束 ,就是父传子的方法,然后在使用封装的组件中去使用,在自定义的form上绑定:model="formInline属性,然后在底下的data中可以建一个集合去放数据,这个集合的名字绑定到model上。
    
    // 对应的是上方第2行中的几个: 后面的值,就是从 elmentui中复制过来的属性在低下↓用传值的方法写
    props: {
      inline: { //这个属性在elelmentui中表示表单布局,ture就是水平,falst是竖直
        type: Boolean,
        default: true,
      },
      model: {   //这个属性是elementui中的数据源,相当于data中的一个数组,里面都是数据
        type: Array, //对象格式
        required: true, //必填的
      },
    },
    data() {
      //获取props传递的数据
      let { model } = this.$props;
      let formData = {};
      model.forEach((item) => {
        formData[item.key] = "";
      });
      return {
        formItem: formData,
      };
    },

封装组件使用无名和具名插槽可以实现form动态效果

<template>
  <div>
    <!-- 自定义的form -->
    <my-form :model="formInline">
      <el-form-item label="用户名">
        <el-input v-model="formInline.user" placeholder="审批人"></el-input>
      </el-form-item>
  <!--  #footer就相当于v-slot,具名插槽就可以通过#name来使用 -->
      <template #footer >
        <el-button type="primary" @click="onSubmit">查询</el-button>
        <el-button type="success" @click="onSubmit">新增</el-button>
        <el-button type="danger" @click="onSubmit">批量删除</el-button>
      </template>
    </my-form>
  </div>
</template>

定义该组件的插槽

<template>
  <el-form :inline="inline" :model="model" class="demo-form-inline">
    <!-- 无名插槽 -->
    <slot></slot>
    <!-- 具名插槽 -->
    <el-form-item>
      <slot name="footer"></slot>
    </el-form-item>
  </el-form>
</template>

定义form表单格式数据


  formInline: [
        {
          name: "用户名",
          ele: "input",
          key: "name",
        },
        {
          name: "爱好",
          ele: "select",
          key: "hobby",
          options: [
            { value: "1", label: "篮球" },
            { value: "2", label: "足球" },
            { value: "3", label: "羽毛球" },
          ],
        },
      ],

根据格式进行动态渲染

<el-form :inline="inline" :model="formItem" class="demo-form-inline">
    <!-- 无名插槽 -->
    <template v-for="(item, index) in model">
      <el-form-item :label="item.name">
        <template v-if="item.ele == 'input'">
          <el-input v-model="formItem[item.key]" :placeholder="item.name" />
        </template>
        <template v-if="item.ele == 'select'">
          <el-select v-model="formItem[item.key]" placeholder="请选择">
            <el-option
              v-for="items in item.options"
              :key="items.value"
              :label="items.label"
              :value="items.value"
            >
            </el-option>
          </el-select>
        </template>
      </el-form-item>
    </template>

    <!-- <slot></slot> -->
    <!-- 具名插槽 -->
    <el-form-item>
      <!-- 局部作用域插槽-->
      <slot name="footer" :item="formItem"></slot>
    </el-form-item>
  </el-form>

根据form表单数据格式进行form数据整理

最终代码格式

封装的elementui公共组件↓

<template>
   <!-- 这里的model要换成formItem 因为在下方把页面组件中的数据传过来变了格式放到了formItem变量中 -->
    <el-form :inline="inline" :model="formItem" class="demo-form-inline">
      <!-- 定义一个末班然后利用模板的标签去遍历,动态生成多个input 这的model就是上方的formItem也就是传过来的数据 -->
      <template v-for="(item, index) in model"  >
        <!-- item.name是文本框里面显示的文字 -->
        <el-form-item :label="item.name" >
          <template v-if="item.ele == 'input'">
            <!-- item.key就是页面组件中formInline里面的key值 -->
            <el-input v-model="formItem[item.key]" :placeholder="item.name" />
          </template>
          <!--需要啥就在这写啥用template 写v-if  -->
          <template v-if="item.ele == 'select'">
            <el-select v-model="formItem[item.key]" placeholder="请选择">
              <!-- 这的item.options就是传过来的值中的所有爱好的数组,然后遍历这个数组使用即可 -->
              <el-option
                v-for="items in item.options"
                :key="items.value"
                :label="items.label"
                :value="items.value"
              >
              </el-option>
            </el-select>

          </template>
        </el-form-item>
      </template>
      <!-- 具名插槽   就是给插槽起个名字 ,比如这里的name="footer",-->
      <el-form-item>
        <!-- 局部作用域插槽 因为要把formItme这个数据源得出去到页面组件中,所以用一个属性绑到这,就形成了局部作用域插槽然后就可以在页面组件中的#footer后面写个= 给个变量,这个变量就是这里的:item ,所以可以用变量.item就可以获得数据了-->
        <slot name="footer" :item="formItem"></slot>
      </el-form-item>
    </el-form>
  </template>
  
  <script>
  export default {
    // 定义props约束 ,就是父传子的方法,然后在使用封装的组件中去使用,在自定义的form上绑定:model="formInline属性
    //然后在底下的data中可以建一个集合去放数据,这个集合的名字绑定到model上

     // 对应的是上方第2行中的几个: 后面的值,就是从 elmentui中复制过来的属性在低下↓用传值的方法写
    props: {
      inline: { //这个属性在elelmentui中表示表单布局,ture就是水平,falst是竖直
        type: Boolean,
        default: true,
      },
      model: {   //这个属性是elementui中的数据源,相当于data中的一个数组,里面都是数据
        type: Array, //对象格式
        required: true, //必填的
      },
    },
    data() {
      //获取props传递的数据,把从页面显示文件中获取的数据拿过来
      let { model } = this.$props;
      let formData = {}; // 声明一个变量
      model.forEach((item) => {   //item是里面的每一项
        formData[item.key] = ""; 
      });
      return {
        formItem: formData,
      };
    },
    watch: {
      formItem: {
        handler(newValue) {
          console.log(newValue);
        },
        deep: true,
      },
    },
  };
  </script>
  
  <style></style>
  

使用这个公共组件的页面展示组件(这里以use为例子)

<template>
  <div>
    <!-- 自定义的form -->
    <my-form :model="formInline">
      <!--  #footer就相当于v-slot,具名插槽就可以通过#name来使用 ,在后面使用一个变量去接收封装的公共组件中传过来的局部作用域里面的属性中的值 这的footer.item就是数据-->
      <template #footer="{ item }">
        <el-button type="primary" @click="onSubmit(item)">查询</el-button>
        <el-button type="success" @click="onSubmit">新增</el-button>
        <el-button type="danger" @click="onSubmit">批量删除</el-button>
      </template>
    </my-form>
  </div>
</template>

<script>
//引入form组件
import formTab from "../../components/elementui/formtab.vue"; //要用到所以引入的,当然如果这个封装用的多了也可以在 全局引入,在main,中引入这个组件,然后,vue下。components用就行
export default {
  components: {
    "my-form": formTab, //给他起个名字,用的时候就直接用名字当做标签名。
  },
  data() {
    return {
      formInline: [
        {
          name: "用户名",
          ele: "input",
          key: "name",
        },
        {
          name: "爱好",
          ele: "select",
          key: "hobby",
          options: [
            { value: "1", label: "篮球" },
            { value: "2", label: "足球" },
            { value: "3", label: "羽毛球" },
          ],
        },
      ],
    };
  },
  methods: {
    onSubmit(form) {
      console.log("submit!", form);
    },
  },
};
</script>

<style></style>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年企业如何改善员工体验?为什么员工体验很重要?

什么是员工体验&#xff1f;大约 96% 的企业领导者表示&#xff0c;专注于员工体验可以更轻松地留住顶尖人才。[1] 这还不是全部。令人震惊的是&#xff0c;87%的企业领导者还表示&#xff0c;优先考虑员工的幸福感将给他们带来竞争优势。尽管有这些发现&#xff0c;但只有19%的…

redis五大IO网络模型、内存回收

目录1.0用户空间和内核态空间1.1 网络模型-阻塞IO1.2 网络模型-非阻塞IO1.3 网络模型-IO多路复用1.3.1 网络模型-IO多路复用-select方式1.3.2 网络模型-IO多路复用模型-poll模式1.3.3 网络模型-IO多路复用模型-epoll函数1.3.4 网络模型-epoll中的ET和LT1.3.5 网络模型-基于epol…

Hadoop高可用搭建(二)

目录 解压Hadoop 改名 更改配置文件 workers hdfs-site.xml core-site.xml hadoop-env.sh mapred-site.xml yarn-site.xml 设置环境变量 启动集群 启动zk集群 启动journalnode服务 格式化hfds namenode 启动namenode 同步namenode信息 查看namenode节点状态 …

三维重建小有基础入门之特征点检测基础

前言&#xff1a;本文将从此篇开始&#xff0c;记录自己从普通CVer入门三维重建的学习过程&#xff0c;可能过程比较坎坷&#xff0c;都在摸索阶段&#xff0c;但争取每次学习都能进一步&#xff0c;提高自己的能力&#xff0c;同时&#xff0c;每篇文章都会按情况相应地推出B站…

一文搞懂core-scheduling核心机制

cookie的原理借助于unsigned long型&#xff0c;和refcount_t引用计数器。 32位64位char *4字节8字节unsigned long4字节8字节 数据结构修改 首先看看实现core scheduling功能对数据结构有哪些修改 task_struct struct task_struct{struct rb_node core_node;unsigned long…

Downie4.6.7

Downie是Mac下一个简单的下载管理器&#xff0c;可以让您快速将不同的视频网站上的视频下载并保存到电脑磁盘里然后使用您的默认媒体播放器观看它们&#xff0c;文章末尾附下载地址。主要特点支持许多网站目前支持超过1,000个不同的网站&#xff08;包括YouTube&#xff0c;Vim…

06 OpenCV‘阈值处理、自适应处理与ostu方法

1 基本概念 CV2中使用阈值的作用是将灰度图像二值化&#xff0c;即将灰度图像的像素值根据一个设定的阈值分成黑白两部分。阈值处理可以用于图像分割、去除噪声、增强图像对比度等多个领域。例如&#xff0c;在物体检测和跟踪中&#xff0c;可以通过对图像进行阈值处理来提取目…

回收站清空了还能找回来吗?回收站恢复的4个方法(最全)

回收站作为一个数据回收的地方&#xff0c;可以保存已删除的文件很久&#xff0c;直到用户手动永久删除这些数据&#xff0c;这为用户避免了许多数据丢失的问题。但是回收站数据过多&#xff0c;难免会影响电脑的运行速度。为此&#xff0c;我们都会定期进行清理。 清理过程中…

LeetCode 92. 反转链表 II

原题链接 难度&#xff1a;middle\color{orange}{middle}middle 题目描述 给你单链表的头指针 headheadhead 和两个整数 leftleftleft 和 rightrightright &#xff0c;其中 left<rightleft < rightleft<right 。请你反转从位置 leftleftleft 到位置 rightrightrig…

Scala 入门(第一章Scala 环境搭建、插件的安装)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 第 1 章 Scala 入门1.1 概述1.1.1 为什么学习 Scala1.1.2 Scala 发展历史1.1.3 Scala 和 Java 关系1.1.4 Scala 语言特点1.2 Scala 环境搭建1.3 Scala 插件安装1.4 HelloWorl…

Web 容器、HTTP 服务器 、Servlet 容器区别与联系

首先浏览器发起 HTTP 请求&#xff0c;像早期的时候只会请求一些静态资源&#xff0c;这时候需要一个服务器来处理 HTTP 请求&#xff0c;并且将相应的静态资源返回。 这个服务器叫 HTTP 服务器。 简单点说就是解析请求&#xff0c;然后得知需要服务器上面哪个文件夹下哪个名字…

三【mybatis的批量删除】

目录一 .批量删除的流程1.1 快速创建实体类1.1.1 创建完毕后 除了属性 其他内容进行删除1.2 创建mapper接口的抽象方法1.3 编写sql语句1.4 测试类Arrays.asList(删除对应的 id 值)运行结果✅作者简介&#xff1a;Java-小白后端开发者 &#x1f96d;公认外号&#xff1a;球场上的…

C语言指针剖析(初阶) 最详细!

什么是指针&#xff1f;指针和指针类型野指针指针运算指针和数组二级指针指针数组什么是指针&#xff1f;指针是内存中一个最小单元的编号&#xff0c;也就是地址。1.把内存划分为一个个的内存单元&#xff0c;一个内存单元的大小是一个字节。2.每个字节都给定唯一的编号&#…

GEE学习笔记九十一:栅格影像叠置分析

最近发现好多人都在问一个问题&#xff0c;两张影像如何取其相交区域&#xff1f;其实这个问题简单来讲就是多张栅格影像进行叠加分析。在GEE中栅格影像不像矢量数据那样有直接的函数来做数据分析&#xff0c;需要我们自己手动写一些代码来实现这些操作。要实现这个功能有很多方…

微信怎么开小店?【企业商家微信开店】

企业商家入局微信做营销已经是经营规划中必须做的一件事了&#xff0c;对于企业商家来说&#xff0c;最简单直接的方式就是开一个微信小店&#xff0c;然后通过自己宣传推广来在微信小店中成商品。那么企业商家在微信怎么开小店呢&#xff1f;下面内容分享给想在微信开店的企业…

滑块连杆模型仿真(含三菱ST+博途SCL计算源代码)

由滑块位置逆计算曲柄角度,请参看下面的文章链接,这篇博客主要计算由曲柄转动角度计算滑块位置。 https://blog.csdn.net/m0_46143730/article/details/128943228https://blog.csdn.net/m0_46143730/article/details/128943228简单的看下连杆滑块模型 模型的数学推导过程,大…

跨境电商新形式下,如何选择市场?

2022年&#xff0c;全球经济已经有增长乏力、通胀高起的趋势&#xff0c;美国等国家的通货膨胀情况令人担忧&#xff0c;不少行业面临更为复杂的外部环境以及严峻的市场挑战。不过&#xff0c;跨境电商行业依旧保持着较高的增长速度&#xff0c;越来越多有远见的卖家将电商事业…

C++之RALL机制

RALL是Resource acquisition is initialization的缩写&#xff0c;意思是“资源获取即初始化”&#xff0c;其核心思想是利用C对象生命周期的概念来控制程序的资源。它的技术原理很简单&#xff0c;如果希望对某个重要资源进行跟踪&#xff0c;那么创建一个对象&#xff0c;并将…

C语言之结构体内存的计算

结构体的内存 一.提出疑问 结构体占用的是一片连续的内存空间&#xff0c;大小是由成员变量的类型决定的。但并不是计算所有成员变量的类型大小之和那么简单。 先举一个实例&#xff1a; struct student {int age; //4个字节int telephone; //4个字节 }; int main() {struc…

如何用P6软件编制项目进度计划(下)

卷首语 根据项目合同包含的工作范围进行工作分解&#xff08;WBS&#xff09;&#xff0c;按照业主的要求及项目管理的需要&#xff0c;考虑不同阶段和层次&#xff0c;适时编制出项目管理所要求的的各级进度计划。 4搜集项目计划与进度控制相关信息 搜集与项目计划编制与进…