vscode-创建vue3项目-修改暗黑主题-常见错误-element插件标签-用法涉及问题

news2024/10/7 16:19:30

文章目录

  • 1.vscode创建运行编译vue3项目
  • 2.添加项目资源
  • 3.添加element-plus元素
  • 4.修改为暗黑主题
    • 4.1.在main.js主文件中引入暗黑样式
    • 4.2.添加自定义样式文件
    • 4.3.html页面html标签添加样式
  • 5.常见错误
    • 5.1.未使用变量
    • 5.2.关闭typescript检查
    • 5.3.调试器支持
    • 5.4.允许未到达代码和未定义代码
  • 6.element常用标签
    • 6.1.下拉列表|el-select
    • 6.2.对话框|el-dialog
  • 7.用法
    • 7.1.其它函数访问data数据
    • 7.2.reactive的使用-异步回调函数中data中数据的引用
    • 7.3.ref的使用-异步回调函数中data中数据的引用
    • 7.4.setup函数返回值-及与data和method的关系
    • 7.5.getCurrentInstance
    • 7.6.纯setup-组合式api绑定范例
    • 7.7.this对象

1.vscode创建运行编译vue3项目

#创建项目
vue create resourceshow
cd resourceshow
#运行项目
npm run serve

#安装界面
npm install element-plus --save
npm i qrcode --save

#编译项目
npm run build

2.添加项目资源

新建图片文件夹,css文件夹。

3.添加element-plus元素

在main.js文件修改如下:

//全局挂载
import { createApp } from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

const app = createApp(App)
app.use(ElementPlus)
app.mount('#app')

4.修改为暗黑主题

npm i sass
npm i scss

4.1.在main.js主文件中引入暗黑样式

import 'element-plus/theme-chalk/dark/css-vars.css'

4.2.添加自定义样式文件

import './assets/main.css'

main.css中内容为:

html.dark {
    --bPageBgColor: #232323;
    --bTextColor: #fff;
    --roleHeaderBgColor: #0e0e0e;
    --selectRowBgColor: #414243;
}

4.3.html页面html标签添加样式

<html lang="" class="dark">

5.常见错误

5.1.未使用变量

error ‘defaultdata’ is assigned a value but never used no-unused-vars

在 package.json 的 rules 里面 添加: “no-unused-vars”: “off” 然后重启项目。

    "rules": {
      "no-unused-vars": "off"
    }

5.2.关闭typescript检查

在设置中搜validate->往下滑找到Tyscript>Validate:Enable选项,取消勾选->重启一下vscode
在这里插入图片描述

5.3.调试器支持

在 package.json 的 rules 里面 添加:“no-debugger”: “off” 然后重启项目。

"no-debugger": "off"

5.4.允许未到达代码和未定义代码

"rules": {
    "no-unused-vars": "off",
    "no-debugger": "off",
    "no-undef": 0 ,
    "no-unreachable": 0
}

6.element常用标签

6.1.下拉列表|el-select

下拉列表数据绑定。

<template>
  <img alt="Vue logo" src="../img/banner.png">
  <div>
    <el-button v-model="isDark" type="primary">Primary</el-button>
  </div>
  <el-switch v-model="isDark"/>

  <el-select v-model="user.name" placeholder="请选择">
    <el-option v-for="item in nameList" :key="item" :label="item" :value="item">
    </el-option>
  </el-select>
  <p>Message is: {{ user.name }}</p>

</template>

<script>
import { useDark, useToggle } from '@vueuse/core'

// const isDark = useDark()
// const toggleDark = useToggle(isDark)


export default {
  name: 'App',
  components: {
    //HelloWorld
  },
  data() {
    return {
      nameList: ["clz", "czh", "ccc"],
      user: {
        name: ""
      },
    };
  }
}
</script>

6.2.对话框|el-dialog

el-dialog 是 Element UI 框架中的一个组件,用于创建对话框,提供了丰富的功能和选项,可以用来创建各种类型的对话框,如信息确认框、表单填写框等。

<template>
  <div id="Login">
    <el-dialog title="登录" v-model="dialogVisible" width="300px" :before-close="LoginClose">
      <img width="248px" height="248px" src="../assets/weixin248.png">
      <template #footer>
        <span class="dialog-footer">
          <el-button @click="LoginClose">取 消</el-button>
          <el-button type="primary" @click="LoginOK">确 定</el-button>
        </span>
      </template>
    </el-dialog>
  </div>
</template>

<script>
import { ref, watch } from 'vue'

export default {
  emits:["Custom-LoginOK"],
  props: {
    visible: {
      type: Boolean,
      default: false
    }
  },

  setup(props, ctx) {

    const dialogVisible = ref(false)

    const LoginClose = () => {
      //修改属性值
      ctx.emit("update:visible", false);
      //dialogVisible.value=false;
    };

    const LoginOK = () => {
      //ctx.emit("update:visible", false);
      ctx.emit("Custom-LoginOK","");
    }

    //属性变换值也发生变化
    watch(() => props.visible, (val) => {
      console.log(props.visible, val);
      dialogVisible.value = val
    });

    return {
      dialogVisible,
      LoginOK,
      LoginClose
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>

</style>

7.用法

7.1.其它函数访问data数据

其它响应函数中访问data函数中的数据对象,可以使用this关键词,如methods对象中的ClearData函数。

export default {
  name: 'App',
  components: {
    //HelloWorld
  },
  data() {
    return {
      codebarNameList: ["ean13", "code128", "code39", "code93", "ean8", "code11", "二维码"],
      fontNameList: ["Arial", "宋体", "黑体", "微软雅黑"],
      codebarPara: {
        name: "ean13",
        width: 40,
        height: 15,
        fontSize: 7.5,
        fontName: "Arial",
        data: "",
        space: 1,
      },
    };
  },
  methods: {    
    ClearData(){
      this.codebarPara.data="";
      //const message = ref('Hello Vue3');
    }
  }
}

7.2.reactive的使用-异步回调函数中data中数据的引用

在介绍ref和reactive之前,我们先了解一下什么是响应式对象。简单来说,响应式对象是指当数据发生改变时,相关的视图会自动更新。这意味着我们只需要关注数据的变化,而无需手动去更新视图。Vue 3通过使用ref和reactive来实现响应式。

import { useDark, useToggle } from '@vueuse/core'
import { ref, computed } from 'vue';
import { reactive } from 'vue';

// const isDark = useDark()
// const toggleDark = useToggle(isDark)
const CodeBarData = ref(null);

//excel数据处理
function ExcelDataOpt(excelData) {
    //删除/r
    excelData = excelData.replace(/\r/g, '');

    //\t转|
    excelData = excelData.replace(/\t/g, '|');

    return excelData;
}

export default {
    name: 'Test',
    components: {
        //HelloWorld
    },
    data() {
        return {
            codebarPara: {
                name: "ean13",
                width: 40,
                height: 15,
                fontSize: 7.5,
                fontName: "Arial",
                data: "",
                space: 1,
            },
        };
    },
    methods: {
        CodebarGenerate() {

        },
        ClearData() {
            this.codebarPara.data = "";
            //const message = ref('Hello Vue3');
        },
        ParseDataFromExcel() {
            //获取剪贴板数据
            async function GetClipData() {
                var source = await navigator.clipboard.readText();
                return source;
            }
            //绑定当前对象数据
            let thisData = reactive(this);
            GetClipData().then(function (data) {
                //console.log(data);
                thisData.codebarPara.data = ExcelDataOpt(data);
            });
        }
    }
}

reactive() 虽然强大,但也有以下几条限制:

a.仅对对象类型有效(对象、数组和 Map、Set 这样的集合类型),而对 string、number 和 boolean 这样的原始类型无效。
b.因为 Vue 的响应式系统是通过属性访问进行追踪的,如果我们直接“替换”一个响应式对象,这会导致对初始引用的响应性连接丢失。

<script setup>
import { reactive } from 'vue'

let state = reactive({ count: 0 })
function change() {
  // 非响应式替换
  state = reactive({ count: 1 })
}
</script>

<template>
  <button @click="change">
    {{ state }} <!-- 当点击button时,始终显示为 { "count": 0 } -->
  </button>
</template>

c.将响应式对象的属性赋值或解构至本地变量,或是将该属性传入一个函数时,会失去响应性。

const state = reactive({ count: 0 })

// n 是一个局部变量,和 state.count 失去响应性连接
let n = state.count
// 不会影响 state
n++

// count 也和 state.count 失去了响应性连接
let { count } = state
// 不会影响 state
count++

// 参数 count 同样和 state.count 失去了响应性连接
function callSomeFunction(count) {
  // 不会影响 state
  count++
}
callSomeFunction(state.count)

7.3.ref的使用-异步回调函数中data中数据的引用

在介绍ref和reactive之前,我们先了解一下什么是响应式对象。简单来说,响应式对象是指当数据发生改变时,相关的视图会自动更新。这意味着我们只需要关注数据的变化,而无需手动去更新视图。Vue 3通过使用ref和reactive来实现响应式。
Vue 提供了一个 ref() 方法来允许我们创建使用任何值类型的响应式 ref 。

import { useDark, useToggle } from '@vueuse/core'
import { ref, computed } from 'vue';
import { reactive } from 'vue';
export default {
    name: 'Test',
    components: {
        //HelloWorld
    },
    data() {
        return {
            codebarPara: {
                name: "ean13",
                width: 40,
                height: 15,
                fontSize: 7.5,
                fontName: "Arial",
                data: "",
                space: 1,
            },
        };
    },
    methods: {
        CodebarGenerate() {

        },
        ClearData() {
            this.codebarPara.data = "";
            //const message = ref('Hello Vue3');
        },
        ParseDataFromExcel() {
            //获取剪贴板数据
            async function GetClipData() {
                var source = await navigator.clipboard.readText();
                return source;
            }
            //绑定当前对象数据
            let thisData = ref(this);
            GetClipData().then(function (data) {
                //console.log(data);
                thisData.value.codebarPara.data = ExcelDataOpt(data);
            });
        }
    }
}

7.4.setup函数返回值-及与data和method的关系

setup函数的使用,通过返回值将数据和方法传到页面,返回值也可以是一个箭头函数
setup先于data和method执行,所以无法读取到this和data,method的内容,反之可以。可以直接将方法放在setup下,然后再进行暴露即可使用。
【注意】setup 内部的属性和方法,必须 return 暴露出来,将属性挂载到实例上,否则没有办法使用。

setup函数:第一个参数是 props ,表示父组件给子组件传值,props 是响应式的,当传入新的 props 时,自动更新。
第二个参数是context 上下文环境,其中包含了 属性、插槽、自定义事件三部分。

范例1,互访问

  import { useDark, useToggle } from '@vueuse/core'
  import { getCurrentInstance, reactive, toRefs, watch, ref } from 'vue'
  import { onMounted } from 'vue'
  
  export default {
    name: 'test',
    components: {
      //HelloWorld
    },
    data() {
      return {
        codebarNameList: ["ean13", "code128", "code39", "code93", "ean8", "code11", "二维码"],
        fontNameList: ["Arial", "宋体", "黑体", "微软雅黑"],
        codebarPara: {
          name: "ean13",
          width: 40,
          height: 15,
          fontSize: 7.5,
          fontName: "Arial",
          data: "",
          space: 1,
        },
      };
    },
    setup(props, ctx) {
      const hello = ref(null);
	  const { proxy } = getCurrentInstance();//全局this对象
	  //加载
      onMounted(() => {
        console.log(hello.value); // <div>知了插件</div>
        var helloObj = hello.value;
        helloObj.id="123";
      });
  
      const ClearDataClicked = () => {
      	//访问data数据成员对象,并修改值
        proxy.codebarPara.data="";
      };
  
      return {
        hello,
        ClearDataClicked
      }
    },
    methods: {
      CodebarGenerate() {
      	//访问setup和data中暴露的值和函数
        this.ClearDataClicked();
        return; 
      },  
      ParseDataFromExcel(){
        //获取剪贴板数据
        async function GetClipData() {
          var source = await navigator.clipboard.readText();        
          return source;
        }
        //绑定当前对象数据
        let thisData = ref(this);
        
        GetClipData().then(function(data){
          //console.log(data);
          thisData.value.codebarPara.data=ExcelDataOpt(data);
          //hello.value=data;
        });      
      }
    }
  }

范例2.常用组织

import { useDark, useToggle } from '@vueuse/core'
import { defineComponent, getCurrentInstance, reactive, toRefs, watch, ref } from 'vue'
import { onMounted } from 'vue'

// const isDark = useDark()
// const toggleDark = useToggle(isDark)


//excel数据处理
function ExcelDataOpt(excelData) {
  //删除/r
  excelData = excelData.replace(/\r/g, '');

  //\t转|
  excelData = excelData.replace(/\t/g, '|');

  return excelData;
}

export default {
  name: 'App',
  components: {
    //HelloWorld
  },
  data() {
    return {
      codebarNameList: ["ean13", "code128", "code39", "code93", "ean8", "code11", "二维码"],
      fontNameList: ["Arial", "宋体", "黑体", "微软雅黑"],
      codebarPara: {
        name: "ean13",
        width: 40,
        height: 15,
        fontSize: 7.5,
        fontName: "Arial",
        data: "",
        space: 1,
      },
    };
  },
  setup(props, ctx) {
    const CodebarParaData = ref(null);
    onMounted(() => {
      console.log(CodebarParaData.value); // <div>知了插件</div>
    });

    const { proxy } = getCurrentInstance();

    const ClearDataClicked = () => {
      var cd = proxy.codebarPara;
      cd.data = "";
    };

    const CodebarGenerate = () => {      
    }

    const ParseDataFromExcel = () => {
      //获取剪贴板数据
      async function GetClipData() {
        var source = await navigator.clipboard.readText();
        return source;
      }

      GetClipData().then(function (data) {
        //console.log(data);
        proxy.codebarPara.data = ExcelDataOpt(data);
        //hello.value=data;
      });
    }

    return {
      hello,
      ClearDataClicked,
      CodebarGenerate,
      ParseDataFromExcel
    }
  },
  methods: {
  }
}

7.5.getCurrentInstance

getCurrentInstance 只能在 setup 或生命周期钩子中使用,内部api建议不要使用。

7.6.纯setup-组合式api绑定范例

<template>
<el-input ref="CodebarParaData" type="textarea" v-model="codebarPara.data" :autosize="{ minRows: 5, maxRows: 10 }"></el-input>
</template>
<script>
import { useDark, useToggle } from '@vueuse/core'
import { getCurrentInstance, reactive, toRefs, watch, ref } from 'vue'
import { onMounted } from 'vue'

export default {
  name: 'App',
  components: {
    //HelloWorld
  },
  data() {
    return {      
    };
  },
  setup(props, ctx) {
    const CodebarParaData = ref(null);
    onMounted(() => {
      console.log(CodebarParaData.value); // <div>知了插件</div>
    });

    const codebarNameList = ref(["ean13", "code128", "code39", "code93", "ean8", "code11", "二维码"]);
    const fontNameList = ref(["Arial", "宋体", "黑体", "微软雅黑"]);
    const codebarPara = ref({
        name: "ean13",
        width: 40,
        height: 15,
        fontSize: 7.5,
        fontName: "Arial",
        data: "",
        space: 1,
      });

    const { proxy } = getCurrentInstance();

    const ClearDataClicked = () => {
      codebarPara.value.data = "";
    };

    const CodebarGenerate = () => {
    
    }

    const ParseDataFromExcel = () => {
      //获取剪贴板数据
      async function GetClipData() {
        var source = await navigator.clipboard.readText();
        return source;
      }

      GetClipData().then(function (data) {
        codebarPara.value.data = ExcelDataOpt(data);
      });
    }

    return {
      CodebarParaData,
      ClearDataClicked,
      CodebarGenerate,
      ParseDataFromExcel,
      codebarNameList,
      fontNameList,
      codebarPara
    }
  },
  methods: {
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  /*color: #2c3e50;*/
  color: var(--bTextColor);
  margin: 0px;
  padding-left: 0;
  height: 100%;
}
</style>

7.7.this对象

Vue 自动为 methods 绑定 this,以便于它始终指向组件实例。这将确保方法在用作事件监听或回调时保持正确的 this 指向。在定义 methods 时应避免使用箭头函数,因为这会阻止 Vue 绑定恰当的 this 指向。

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

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

相关文章

量产工具一一显示系统(一)

目录 前言 一、项目介绍和应用 1.简单易用 2.软件可配置、易扩展 3.纯 C 语言编程 4.类似界面应用 二、项目总体框架 三、显示系统 1.显示系统数据结构抽象 &#xff08;1&#xff09;common.h &#xff08;2&#xff09;disp_manager.h 2.Framebuffer编程 &#x…

Conformal Prediction

1 A Gentle Introduction to Conformal Prediction and Distribution-Free Uncertainty Quantification 2 Language Models with Conformal Factuality Guarantees

《数据结构与算法基础 by王卓老师》学习笔记——类C语言有关操作补充

1.元素类型说明 2.数组定义 3.C语言的内存动态分配 4..C中的参数传递 5.传值方式 6.传地址方式 例子

grpc学习golang版( 一、基本概念与安装 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、基本介绍1.1 什么是rpc1.2 什么是grpc1.3 grpc的作用1.4 grp…

Django之邮箱注册

目录 一、邮箱验证-环境搭建 1.1、注册流程 1.2、环境搭建 二、封装工具类 三、发送邮件接口开发 四、用户调用发送邮件接口 4.1、Fetch API 4.1.1、GET请求 4.1.2、POST请求 五、完成注册功能 一、邮箱验证-环境搭建 1.1、注册流程 1.2、环境搭建 创建项目 django-a…

4 快速傅里叶变换(fast Fourier transform,FFT)

目录 基2FFT的基本原理&#xff0c;蝶形运算符 第L级旋转因子的计算公式 4点与8点鲽形图 确定输入x(n)的顺序 倒序算法 抽样算法 DFT与FFT运算次数公式 基2FFT的基本原理&#xff0c;蝶形运算符 第L级旋转因子的计算公式 4点与8点鲽形图 确定输入x(n)的顺序 倒序算法 1…

Java开发-实际工作经验和技巧-0003-容易被忽视的Git提交代码规范

Java开发-实际工作经验和技巧-0003-容易被忽视的Git提交代码规范 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&…

C# Benchmark

创建控制台项目&#xff08;或修改现有项目的Main方法代码&#xff09;&#xff0c;Nget导入Benchmark0.13.12&#xff0c;创建测试类&#xff1a; public class StringBenchMark{int[] numbers;public StringBenchMark() {numbers Enumerable.Range(1, 20000).ToArray();}[Be…

互联网算法备案 | 填报指南

一、填报入口 登陆互联网信息服务算法备案系统&#xff08;以下简称备案系统&#xff09;进行填报&#xff0c;网址为https://beian.cac.gov.cn。系统首页如图1所示。 图1备案系统首页&#xff08;示意图&#xff09; 二、填报流程 填报人员需首先注册并登陆备案系统&#x…

Hugging Face发布重量级版本:Transformer 4.4.2

Hugging Face 宣布发布Transformer 4.4.2&#xff0c;该版本为流行的机器学习库带来了许多新功能和增强功能。此版本引入了几个高级模型&#xff0c;支持新工具和检索增强生成 &#xff08;RAG&#xff09;&#xff0c;提供 GGUF 微调&#xff0c;并整合了量化的 KV 缓存&#…

机械设计简单介绍

机械设计简单介绍 1 介绍1.1 概述1.2 机械机构设计基本步骤1.3 关键1.3.1 静力学1.3.2 动力学1.3.3 运动学1.3.4 刚度学 1.4 示例【机械臂】 2 资料2.1 知识体系2.2 博客类汇总2.3 免费CAD模型获取2.4 3D打印2.5 SolidWorks 3 具备能力3.1 熟练翻阅 机械设计手册3.2 知道 N 家常…

BeautifulSoup 类通过查找方法选取节点

BeautifulSoup 类提供了一些基于 HTML 或 XML 节点树选取节点的方法&#xff0c;其中比较主流 的两个方法是 find() 方法和 find_all() 方法。 find() 方法用于查找符合条件的第一个节点&#xff1b; find_all() 方法用于查找所有符合条件的节点&#xff0c;并以列表的…

代码随想录算法训练营第三十五天(dp)|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

509. 斐波那契数 题目链接&#xff1a;509. 斐波那契数 文档讲解&#xff1a;代码随想录 状态&#xff1a;so easy 思路&#xff1a;最简单的递归就不说了。使用动态规划的话&#xff0c;状态转移方程 dp[i] dp[i - 1] dp[i - 2] 题解&#xff1a; public int fib(int n) {…

miniconda 弹出黑窗

etc\conda\activate.d 和 envs 中不同环境中的 etc\conda\activated.d&#xff0c;只保留下图中的三个文件即可。

综合项目实战--jenkins节点模式

一、DevOps流程 DevOps是一种方法论,是一系列可以帮助开发者和运维人员在实现各自目标的前提下,向自己的客户或用户交付最大化价值及最高质量成果的基本原则和实践,能让开发、测试、运维效率协同工作的方法。 DevOps流程(自动化测试部分) DevOps完整流程 二、gitee+j…

Leica Cyclone 3DR2024 一款功能强大的点云建模软件下载License获取

Leica Cyclone 3DR 2024 是一款功能强大的点云建模软件&#xff0c;使用旨在为用户提供全面的点云管理、自动化的点云分析&#xff0c;结合强大的建模&#xff0c;在一个直观友好的环境中&#xff0c;专注的完成挑战&#xff0c;提高生产力&#xff0c;轻松创建并交付专业的成果…

AWTK 用 icon_at 属性设置图标位置

1. style 在 style 文件中通过 icon_at 属性设置图标位置。 <style name"right_bottom" icon_at"right_bottom"><normal icon"unchecked_right_bottom" /><pressed icon"unchecked_right_bottom" /><over i…

揭开大语言模型(LLM)内部运作的算法逻辑

本文探讨了 Anthropic 的突破性技术&#xff0c;以揭示大型语言模型 (LLM) 的内部工作原理&#xff0c;揭示其不透明的本质。通过深入研究LLM Claude Sonnet 的“大脑”&#xff0c;Anthropic 增强了人工智能的安全性和可解释性&#xff0c;为人工智能的决策过程提供了更深入的…

语言模型:文本表征词嵌入技术调研

1 文本表征 文本表征是自然语言处理中的关键部分&#xff0c;尤其在当前大模型快速发展的背景下。由于大模型存在知识有限、处理文本长度有限、保密要求和大模型幻觉等问题&#xff0c;结合外部数据显得尤为重要。 为了便于存储和检索&#xff0c;除了保存纯文本外&#xff0…

机器学习基础:开源库学习-Numpy科学计算库

目录 Numpy科学计算库 什么是多维数组 数组基础 高维数组 操作和创建数组 Numpy介绍 创建数组 数组的属性 二维数组 三维数组 数组元素的数据类型 创建特殊的数组 np.arange() np.ones() np.zeros() np.eye() np.linspace() np.logspace() asarray() 数组运…