【Vue】Vue指令与生命周期以及组件化编码

目录

  • 常用内置指令
    • v-text与v-html
      • v-text : 更新元素的 textContent
      • v-html : 更新元素的 innerHTML
      • 注意:v-html有安全性问题!!!!
    • v-once与v-pre
      • v-once
      • v-pre
    • ref与v-cloak
      • ref
      • v-cloak
  • 自定义指令
    • 案例
    • 定义语法
    • 配置对象中常用的3个回调
    • 备注
    • 使用指令
      • 代码解释
      • 全局指令写法
    • 回调函数(钩子函数)
  • Vue生命周期
    • 初始化显示
    • 更新状态
    • 销毁 vue 实例: vm.$destory()
    • 总结起来:
    • 生命周期的应用场景
  • VUE组件化编程
    • 模块:
    • 组件:
    • 总结
    • 非单文件组件
      • 创建组件:
      • 注册组件:
      • 使用组件(写组件标签)
    • 代码示例
    • 注意事项
      • 关于组件名:
        • 一个单词组成:
        • 多个单词组成:
      • 备注:
      • 关于组件标签:
      • 组件嵌套
    • 非单文件组件小结
    • 单文件组件
        • 模板页:
        • JS 模块对象:
        • 样式:
      • 问题
      • 解决

常用内置指令

内置指令说明
v-text更新元素的 textContent
v-html更新元素的 innerHTML
v-if如果为true, 当前标签才会输出到页面
v-else如果为false, 当前标签才会输出到页面
v-show通过控制display样式来控制显示/隐藏
v-for遍历数组/对象
v-on绑定事件监听, 一般简写为@
v-bind强制绑定解析表达式, 可以省略v-bind
v-model双向数据绑定

v-text与v-html

v-text : 更新元素的 textContent

  • 作用:向其所在的节点中渲染文本内容。
  • 与插值语法的区别:v-text会替换掉节点中的内容,{{xx}}则不会。

v-html : 更新元素的 innerHTML

  • 作用:向指定节点中渲染包含html结构的内容。
  • 与插值语法的区别:
    • v-html会替换掉节点中所有的内容,{{xx}}则不会。
    • v-html可以识别html结构。

注意:v-html有安全性问题!!!!

  • 在网站上动态渲染任意HTML是非常危险的,容易导致XSS攻击。
  • 一定要在可信的内容上使用v-html,永不要用在用户提交的内容上!
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Vue初体验</title><!-- 1.引入Vue --><script src="../js/vue.js"></script>
</head>
<body><!-- 2.准备一个容器 --><div id="root"><div>你好,{{name}}</div><div v-text="name">HELLO,</div><div v-text="ele"></div><div v-html="ele"></div></div><script>//3.创建Vue实例const vm = new Vue({el:'#root',data:{name:'Vue',ele: '<a href="https://www.baidu.com">百度</a>'}});</script>
</body>
</html>

v-once与v-pre

v-once

  • v-once所在节点在初次动态渲染后,就视为静态内容了。
  • 以后数据的改变不会引起v-once所在结构的更新,可以用于优化性能。

v-pre

  • 跳过其所在节点的编译过程。(vue 不去解析 插值等语法)
  • 可利用它跳过:没有使用指令语法、没有使用插值语法的节点,会加快编译。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Vue初体验</title><!-- 1.引入Vue --><script src="../js/vue.js"></script>
</head>
<body><!-- 2.准备一个容器 --><div id="root"><div v-once>v-once,{{n}}</div><div v-pre>v-pre,{{n}}</div><div>当前n的值是:{{n}}</div><button @click="n++">n+1</button></div><script>//3.创建Vue实例const vm = new Vue({el:'#root',data:{n:1},});</script>
</body>
</html>

ref与v-cloak

ref

  • 为某个元素注册一个唯一标识, vue对象通过$refs属性访问这个元素对象。

v-cloak

  • 使用它防止闪现表达式, 与css配合: [v-cloak] { display: none }
    • 本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性。
    • 使用css配合v-cloak可以解决网速慢时页面展示出{{xxx}}的问题。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Vue初体验</title><!-- 1.引入Vue --><script src="../js/vue.js"></script><style>[v-cloak]{display: none;color: red;border: 3px solid green}</style>
</head>
<body><!-- 2.准备一个容器 --><div id="root"><p ref="content"><a href="">baidu.com</a></p><button @click="hint">点击</button><p v-cloak>{{msg}}</p><h2 v-cloak>{{name}}</h2></div><script>//3.创建Vue实例const vm = new Vue({el:'#root',data:{msg:'消息',name:'Vue'},methods:{hint(){console.log(this.$refs.content.innerHTML);console.log(this.$refs.content.textContent);}}});</script>
</body>
</html>

自定义指令

案例

  • 需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍。
  • 需求2:定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点。

定义语法

  • 局部指令(new Vue({xx})):xx为directives:{指令名:配置对象}或directives{指令名:回调函数}
  • 全局指令:Vue.directive(指令名,配置对象)或Vue.directive(指令名,回调函数)

配置对象中常用的3个回调

  • bind:指令与元素成功绑定时调用。
  • inserted:指令所在元素被插入页面时调用。
  • update:指令所在模板结构被重新解析时调用。

备注

  • 指令定义时不加v-,但使用时要加v-;
  • 指令名如果是多个单词,要使用kebab-case命名方式,不要用camelCase命名。

使用指令

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Vue初体验</title><!-- 1.引入Vue --><script src="../js/vue.js"></script>
</head>
<body><!-- 2.准备一个容器 --><div id="root"><h1>当前n的值是:<span v-text="n"></span></h1><h1>放大10倍后的n的值是:<span v-big="n"></span></h1><button @click="n++">点击n+1</button><hr><input type="text" v-fbind:value="n"></div><script>//3.创建Vue实例const vm = new Vue({el:'#root',data:{n:10,},directives:{big(el,binding){el.innerText = binding.value * 10;},fbind:{bind(el,binding){el.value = binding.value;},// 指令的定义inserted(el,binding){el.focus();},update(el,binding){el.value = binding.value;el.focus();}}},});</script>
</body>
</html>

代码解释

        directives:{//指令名如果是多个单词,别忘了加"",方法内部放的是"key,value值",//大部分情况""可省略,但是加了-之后引号必须带//全写是'big-number':function(element,binding){}//函数写法//big函数何时会被调用?1.指令与元素成功绑定时(一上来就是),//2.指令所在的模板被重新解析时big(el,binding){//两个参数 当前DOM元素(span),本次绑定的所有信息console.log('big',this)//注意这里的this是windowel.innerText = binding.value * 10;},//对象写法fbind:{//指令与元素成功绑定时调用bind(el,binding){el.value = binding.value;},// 指令在元素插入页面时调用inserted(el,binding){el.focus();//input输入框自动获取焦点,这句代码必须放在将input放入页面的后面},//指令所在的模板重新定义时调用update(el,binding){el.value = binding.value;el.focus();}}},

全局指令写法

    Vue.directives('fbind',{bind(el,binding){el.value = binding.value;},// 指令的定义inserted(el,binding){el.focus();},update(el,binding){el.value = binding.value;el.focus();}})Vue.directives('big',function (el,binding) {el.innerText = binding.value * 10;})

回调函数(钩子函数)

  • el:指令所绑定的元素,可以用来直接操作 DOM
  • binding:一个对象,包含以下 property:
    • name:指令名,不包括 v- 前缀。
    • value:指令的绑定值,例如:v-my-directive=“1 + 1” 中,绑定值为 2。
    • oldValue:指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
    • expression:字符串形式的指令表达式。例如 v-my-directive=“1 + 1” 中,表达式为 “1 + 1”。
    • arg:传给指令的参数,可选。例如 v-my-directive:foo 中,参数为 “foo”。
    • modifiers:一个包含修饰符的对象。例如:v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }
    • vnode:Vue 编译生成的虚拟节点
    • oldVnode:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Vue初体验</title><!-- 1.引入Vue --><script src="../js/vue.js"></script>
</head>
<body>
<!-- 2.准备一个容器 -->
<div id="root" v-demo:foo.a.b="name"></div>
<hr>
<div id="root2" v-demo:foo.a.b.c="1+1"></div>
<script>Vue.directive('demo',{bind:function (el,binding,vnode) {var s = JSON.stringifyel.innerHTML ='name: ' + s(binding.name) + '<br>' +'value: ' + s(binding.value) + '<br>' +'expression: ' + s(binding.expression) + '<br>' +'argument: ' + s(binding.arg) + '<br>' +'modifiers: ' + s(binding.modifiers) + '<br>'}})//3.创建Vue实例const vm = new Vue({el:'#root',data:{name:'Vue',},});const vm2 = new Vue({el:'#root2',data:{},});
</script>
</body>
</html>

在这里插入图片描述

Vue生命周期

  • 又名:生命周期回调函数、生命周期函数、生命周期钩子。
  • 是什么:Vue在关键时刻帮我们调用的一些特殊名称的函数。
  • 生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。
  • 生命周期函数中的this指向是vm 或 组件实例对象(vue内部做了处理)

初始化显示

beforeCreate()、created()、beforeMount()、mounted()

更新状态

beforeUpdate()、updated()

销毁 vue 实例: vm.$destory()

beforeDestory()、destoryed()

在这里插入图片描述

总结起来:

  1. 创建前阶段(beforeCreate): 实例刚在内存中被创建出来,此时还未进行数据初始化和事件的监听。
  2. 创建阶段(created): 实例已经在内存中创建完毕,完成了数据初始化,但尚未挂载到页面上。
  3. 挂载前阶段(beforeMount): 实例将要挂载到页面上,此时 render 函数首次被调用。
  4. 挂载阶段(mounted): 实例已经挂载到页面,此时页面上的 DOM 元素可以被访问。
  5. 更新前阶段(beforeUpdate): 当数据发生变化时,虚拟 DOM 将被重新渲染,但尚未更新到页面上。
  6. 更新阶段(updated): 数据已经更新到页面上,此时页面上的 DOM 元素也得到了更新。
  7. 销毁前阶段(beforeDestroy): 实例将要被销毁,此时可以进行一些清理工作,如取消定时器、解绑事件等。
  8. 销毁阶段(destroyed): 实例已经被销毁,所有的事件监听器都已经被移除,所有的子实例也都被销毁。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Vue初体验</title><!-- 1.引入Vue --><script src="../js/vue.js"></script>
</head>
<body><!-- 2.准备一个容器 --><div id="root"><h1>{{name}}</h1><button @click="changeName">点击更换内容</button></div><script>//3.创建Vue实例const vm = new Vue({el: '#root',data: {name: 'Hello Vue',},beforeCreate() {console.log('beforeCreate: 实例创建前的钩子函数');},created() {console.log('created: 实例创建完毕,数据初始化完成');},beforeMount() {console.log('beforeMount: 实例将要挂载到页面上');},mounted() {console.log('mounted: 实例已经挂载到页面上');},beforeUpdate() {console.log('beforeUpdate: 数据将要更新,虚拟 DOM 重新渲染前');},updated() {console.log('updated: 数据已经更新,页面上的 DOM 元素也已更新');},beforeDestroy() {console.log('beforeDestroy: 实例将要被销毁');},destroyed() {console.log('destroyed: 实例已经被销毁');},methods: {changeName() {this.name = 'Hello World!!!';}}})</script>
</body>
</html>

生命周期的应用场景

钩子描述
created 钩子在这个阶段,可以进行数据初始化、异步请求、事件监听等操作。通常用于初始化组件所需的数据。
mounted 钩子在组件挂载后执行,适合执行需要访问DOM元素的操作,如使用第三方库对页面进行操作。
beforeUpdate 钩子在数据更新但尚未更新到页面上时执行,可以用于获取更新前的DOM状态,或执行一些更新前的准备工作。
updated 钩子在数据更新且更新到页面上后执行,适合执行需要操作更新后的DOM的任务。
beforeDestroy 钩子在组件销毁前执行,可以用于清理定时器、解绑事件等清理工作。
destroyed 钩子在组件销毁后执行,适合执行一些需要在组件销毁后进行的清理工作。

VUE组件化编程

  • 组件定义:实现应用中局部功能代码和资源的集合

模块:

  • 理解:向外提供特定功能的js程序,一般就是一个js文件
  • 为什么:js文件很多很复杂
  • 作用:复用js,简化js的编写,提高js运行效率。
    在这里插入图片描述

组件:

  • 理解:用来实现局部(特定)功能效果的代码集合(html/css/js/image……)
  • 为什么:一个界面的功能很复杂
  • 作用:复用编码,简化项目编码,提高运行效率
    在这里插入图片描述

总结

  • 模块化:当应用中的js都以模块来编写的,那这个应用就是一个模块化的应用。
  • 组件化:当应用中的功能都是多组件的方式来编写的,那这个应用就是一个组件化的应用。
    在这里插入图片描述

非单文件组件

使用组件的三大步骤

创建组件:

使用Vue.extend(options)创建,其中 options和 new Vue(options)时传入的那个 options几乎一样,但有以下区别

  • 不要写 el——最终所有的组件都要经过一个vm的管理,由vm中的 el决定服务哪个容器
  • data必须写成函数——避免组件被复用时,数据存在引用关系
    • 引申出data为什么需要是一个函数(利用一个最基本的函数调用销毁原理返回新对象)
  • 【备注】使用 tempalte可以配置组件结构

注册组件:

  • 局部创建:new Vue的时候传入 components选项
  • 全局创建:Vue.component(‘组件名’, 组件)

使用组件(写组件标签)

代码示例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Vue初体验</title><!-- 1.引入Vue --><script src="../js/vue.js"></script>
</head>
<body><!-- 2.准备一个容器 --><div id="root"><h1>{{name}}</h1><hr><!-- 第三步:使用模板 --><School></School><!--<hr><Student></Student>--></div><script>//第一步:创建模板const School = Vue.extend({template: `<div><h1>学校名称:{{schoolName}}</h1><h1>学校地址:{{schoolAddress}}</h1><button @click="showName">点击显示学校名称</button></div>`,//el:'root',//组件定义时不支持el属性,因为最终所有的组件都要被一个vm管理,由vm决定服务于哪个容器data(){return {schoolName:'复旦大学',schoolAddress:'上海'}},methods: {showName() {alert(this.schoolName)}}})//Vue.component("School",School) // 全局注册//3.创建Vue实例const vm = new Vue({el: '#root',components: {//局部注册,第二步:注册模板School},data(){return{name: 'Hello Vue',}},methods: {showName() {alert(this.schoolName)}}})</script>
</body>
</html>

注意事项

关于组件名:

一个单词组成:
  • 第一种写法(首字母小写): school
  • 第二种写法(首字母大写): School
多个单词组成:
  • 第一种写法(kebab-case命名): my-school
  • 第二种写法(CamelCase命名): MySchool(需要Vue脚手架支持)

备注:

  1. 组件名尽可能回避HTML中已有的元素名称,例如h2、H2
  2. 可以使用 name配置项指定组件在开发者工具中呈现的名字(写标签名的时候还得按注册的写法)

关于组件标签:

  • 第一种写法:
  • 第二种写法: (不使用脚手架会导致后续组件不能渲染)
  • 简写方式:const school = Vue.extend(options) 可以简写成 const school = options

组件嵌套

  • 极尽可能的复用代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Vue初体验</title><!-- 1.引入Vue --><script src="../js/vue.js"></script>
</head>
<body><!-- 2.准备一个容器 --><div id="root"><h1>{{name}}</h1><hr><!-- 第三步:使用模板 --><School></School><hr><Student></Student></div><script>const Student = Vue.extend({template: `<div><h1>学校名称:{{studentName}}</h1><h1>学校地址:{{studentAge}}</h1><button @click="showStudentName">点击显示学生名称</button></div>`,data(){return {studentName:'朱家宝',studentAge:18}},methods: {showStudentName() {alert(this.studentName)}}})//第一步:创建模板const School = Vue.extend({template: `<div><h1>学校名称:{{schoolName}}</h1><h1>学校地址:{{schoolAddress}}</h1><button @click="showName">点击显示学校名称</button><div style="border: 1px solid red;width: 50%"><Student></Student></div></div>`,components: {//局部注册,第二步:注册模板Student},data(){return {schoolName:'复旦大学',schoolAddress:'上海'}},methods: {showName() {alert(this.schoolName)}}})//3.创建Vue实例const vm = new Vue({el: '#root',components: {//局部注册,第二步:注册模板School,Student},data(){return{name: 'Hello Vue',}}})</script>
</body>
</html>

非单文件组件小结

  1. 模板编写没有提示
  2. 没有构建过程, 无法将 ES6 转换成 ES5
  3. 不支持组件的 CSS
  4. 真正开发中几乎不用:

单文件组件

单文件组件 vue 文件的组成(3 个部分)

模板页:
<template>
页面模板
</template>
JS 模块对象:
<script>
export default{...}
</script>
样式:
<style>
样式定义
</style>

在这里插入图片描述

问题

在这里插入图片描述

解决

  • Vue脚手架

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

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

相关文章

两数相加 - (LeetCode)

前言 今天无意间看到LeetCode的一道“两数相加”的算法题&#xff0c;第一次接触链表ListNode&#xff0c;ListNode结构如下&#xff1a; public class ListNode {int val;ListNode next;ListNode() {}ListNode(int val) {this.val val;}ListNode(int val, ListNode next) {…

Sectigo SSL证书申请的流程是怎样的?

在当今数字化时代&#xff0c;网络安全成为了一个不可忽视的问题。为了保护网站和用户数据的安全&#xff0c;SSL证书成为了网站运营的重要组成部分。Sectigo作为全球领先的数字证书颁发机构之一&#xff0c;提供了一系列的证书解决方案来满足不同类型网站的需求。以下是对Sect…

2024年算法建模与计算机通信国际学术会议(ICAMCC 2024)

2024年算法建模与计算机通信国际学术会议(ICAMCC 2024) 2024 International Conference on Algorithm Modeling and Computer Communication(ICAMCC 2024) 会议简介&#xff1a; 2024年算法建模与计算机通信国际学术会议(ICAMCC 2024)将于中国南昌市盛大开幕。这次会议的目的是…

IP应用场景查询API接口

IP应用场景查询API接口指的是输入IP地址&#xff0c;查询IP应用场景信息。那么IP地址应用场景查询接口如何对接呢&#xff1f; 首先我们找到一家有IP地址应用场景查询API的服务商数脉API,然后注册账号&#xff0c;购买免费套餐 接下来就需要技术同学把IP应用场景查询接口对接到…

CentOS7中如何docker-compose

在 CentOS 7 上安装 docker-compose 需要几个步骤 步骤 1: 安装 Docker 首先&#xff0c;确保你已经安装了 Docker。如果没有安装&#xff0c;可以通过以下命令安装&#xff1a; sudo yum update -y sudo yum install -y yum-utils sudo yum-config-manager --add-repo http…

攻防世界(CTF)~web-supersqli(详细解题思路)

题目介绍 题目描述“随便注” 先看一下是否存在注入 判断闭合方式 输入1’ and 11-- -正常回显 输入1and 12-- -无回显,确认是单引号闭合 看一下列数 输入1 order by 2-- - 有回显 输入1 order by 3-- - 报错&#xff0c;由此判断两列 使用union联合注入发现select被过滤了&a…

WMS仓储管理系统如何让仓库管理有过程

在当今竞争激烈的商业环境中&#xff0c;WMS仓储管理系统的智能化与过程化管理显得尤为重要。一个具有过程管理的WMS仓储管理系统不仅能够帮助企业实时监控、分析和调度仓库作业&#xff0c;还能显著提升作业效率和成本控制能力。下面&#xff0c;我们就来深入探讨一下这种“有…

IT Tools

vs & vscode工具 Vs Extensions & Remote Development Vs Extensions Remote-SSH VSCode远程连接到Linux并实现免密码登录 Git Graph C cppreference.com cplusplus 镜像站点 用于下载 QT, Ubuntu, 清华镜像站点 CMake Download Documents Cmake 构建QT …

IO系列(三) - 文件读写操作介绍

一、摘要 在之前的文章中&#xff0c;我们了解到在 Java I/O 体系中&#xff0c;File 类是唯一代表磁盘文件本身的对象。 File 类定义了一些与平台无关的方法来操作文件&#xff0c;包括检查一个文件是否存在、创建、删除文件、重命名文件、判断文件的读写权限是否存在、设置…

揿针在医保上叫什么?

点击文末领取揿针的视频教程跟直播讲解 创新型皮内针&#xff08;揿针&#xff09;——医保甲类产品 皮内针&#xff08;揿针&#xff09;技术属于重点推广的中医适宜技术&#xff0c;是将特制的小型针具固定于腧穴部位的皮内或皮下做较长时间留针的一种方法&#xff0c;称“…

2024年 C++音视频开发学习路线(ffmpeg/rtsp/srs/webrtc/hls)

在音视频工作领域&#xff0c;很多人可能会陷入徘徊和迷茫的境地。音视频的知识纷繁复杂&#xff0c;自己学习非常困难&#xff0c;既需要非常扎实的基础知识&#xff0c;又需要有很多的工程经验&#xff1b;不知道如何学&#xff0c;怎样才能查漏补缺自己的技术短板。 对于音…

QT C++ widget layout 嵌套 例子2

在上篇文章中描述了实中套虚&#xff08;用setLayout&#xff09;&#xff0c;虚中套实&#xff08;用addWidget&#xff09;。 本文再加1条&#xff0c;虚中套虚&#xff08;用addLayout&#xff09;。 所谓虚中套虚&#xff0c;是layout 套 layout 。 另外用循环代码生成从…

记录接口请求偶发504 Gateway Time-out问题

项目场景&#xff1a; 我们将服务部署到A公司服务器中&#xff0c;使用了共五台服务器&#xff0c;分别是&#xff1a;1.NG服务器 2.日志服务器 3.缓存服务器 4.应用服务器1 5.应用服务器2 。而请求过来首先到达的是他们的物理代理服务器&#xff0c;然后再转发请求到我们的ng…

【Neo4jJDK开箱即用的安装全流程】

neo4j:命令行本地访问loclhost neo4j:命令行本地访问loclhost2 neo4j操作 Neo4j桌面版数据库导出导入 Neo4j安装与配置以及JDK安装与配置教程&#xff08;超详细&#xff09; Neo4j 安装、使用教程 Neo4j安装教程 Neo4J桌面版的配置和连接Pycharm jdk-neo对应版本 JDK ORACLE中…

数据结构(四)————二叉树和堆(中)

制作不易&#xff0c;三连支持一下呗&#xff01;&#xff01;&#xff01; 文章目录 前言一、堆的概念及结构二、堆的实现三.堆的应用 总结 前言 CSDN 这篇博客介绍了二叉树中的基本概念和存储结构&#xff0c;接下来我们将运用这些结构来实现二叉树 一、堆的概念及结构 1…

用sunoAI写粤语歌的方法,博主已经亲自实践可行

粤语歌还是很好听的&#xff0c;那么如何使用suno进行粤语歌的创作呢&#xff1f; 本文和大家进行分享下如何进行粤语歌曲的创作。 访问地址如下&#xff08;电脑端/手机端一个地址&#xff09;&#xff1a; ​https://suno3.cn/#/?i8NCBS8_WXTT 在微信浏览器中也可以直接…

css 案例 横向滚动渐变

效果 完整代码&#xff1a; <template><view class"content"><view class"tab"><view class"tab-item" v-for"(item,index) in tab" :key"index" click"handlerTab(index)":class"ind…

winserver系统设置图片查看器

新建 .bat 批处理执行文件&#xff0c;内容如下&#xff1a; echo off&cd&color 0a&cls echo Set Win10 Photo Viewer reg add "HKLM\SOFTWARE\Microsoft\Windows Photo Viewer\Capabilities\FileAssociations" /v ".jpg" /t REG_SZ /d Photo…

MySQL——利用变量进行查询操作

新建链接&#xff0c;自带world数据库&#xff0c;里面自带city表格。 DQL # MySQL利用变量进行查询操作 set cityNameHaarlemmermeer; select * from city where NamecityName;# 多个结果查询 set cityName1Haarlemmermeer; set cityName2Breda; set cityName3Willemstad; s…

古月居讲师/签约作者招募计划

机器人&#xff0c;作为一个集成了多学科技术的复杂系统&#xff0c;其开发过程充满了挑战。为了帮助开发者们更好地克服这些挑战&#xff0c;提升项目的开发效率和质量&#xff0c;古月居特别招募[博客签约作者/课程讲师]。如果您平常热爱记录、分享开发者经验的习惯&#xff…