vue 入门一

news2024/9/20 21:05:22

参考:丁丁的哔哩哔哩

1.使用vue

1.1 使用CDN的方式使用VueList item
mount和<div id="counter">关联起来
1.2 vue中的createApp
在这里插入图片描述

import { createApp } from "vue";
import App from "./App.vue";
createApp(App).mount("#app");

vue中的createApp方法将App组件挂载到id=app的HTML页面中。

2.模板语法

2.1 针对HTML元素的内容

// 最基本的数据绑定形式:文本插值,“Mustache”语法
<p>{{ msg }}</p>
// v-once:当数据改变时,插值处的内容不会更新
<p v-once> {{ userName }} </p>  
// v-html:让内容以HTML的形式展示
<p v-html="userName"></p>

2.2 针对HTML元素的属性(attribute)

// v-bind:动态的绑定属性的内容
<p v-bind:id="id"></p>

2.3 使用js表达式

// 在事件中使用
<p @click="id=1" />
// 插值中使用
<p>{{ num + 1 }}</p>
// v-bind中使用
<p v-bind:id="id+1"></p>

2.4 指令

指令是带有v-前缀的特殊attribute,指令还有参数,冒号:后面的即为参数;
指令的值是单个js表达式

2.5 语法糖

// 监听dom事件
v-on:click  --> @click
// 动态绑定HTML元素属性
v-bind:id --> :id

2.6 动态参数

// 原始形式
<p v-bind:id="id+1"></p>
// 动态属性
const attrName="id";
<p v-bind:[attrName]="id+1"></p>
// 动态事件
const mouseOver="click";
<p v-on:[mouseOver]="change"></p>

3.data属性和方法

// data是一个函数,methods是一个对象
export default {
	data(){ return {} }, // 让每一个组件对象都返回一个新的对象,不会造成数据污染
	methods:{}
}

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

4.计算属性 — 模板语法不适宜复杂表达式时

  • 计算属性调用时,没加括号,把他当作属性调用;
  • 有依赖值,依赖值不变,就不会重新计算,有缓存
<p> {{ wordFlag }} </p>
const wordFlag=computed(()=>{
	return wordFlag ==1 ? true : false
})

5.侦听器

和计算属性类似,在响应数据变化时(依赖值变化),侦听器适用在需要执行异步或开销较大的操作时。

简单示例

const message=ref("");
watch(message, (newValue,oldValue) => { // 一个数据影响多个数据,而计算属性只能影响一个数据
		console.log(newValue);
		console.log(oldValue);
		// 执行一些异步操作
	})

立即执行 初始化时就调用函数

watch(
  source,
  (newValue, oldValue) => {
    // 立即执行,且当 `source` 改变时再次执行
  },
  { immediate: true }
)

深度监听 适用于响应式对象中的属性
vue3 隐式地创建一个深层侦听器——该回调函数在所有嵌套的变更时都会被触发。

<p>{{msg.name}}</p>

const msg = reactive({
  name: "hello world",
  home:{
    mother:"mother",
    father:"father"
  }
})
watch(msg, (newValue)=>{
  console.log(newValue.name)
  console.log("msg change")
})

当msg.home变化时,不执行回调

// 不执行回调
watch(()=> msg.home, (newValue, oldValue)=>{
  console.log("深度监听生效",newValue.mother)
})

加上 deep 选项,强制转成深层侦听器,可以执行回调

watch(()=> msg.home, (newValue, oldValue)=>{
  console.log("深度监听生效",newValue.mother)
}, {deep:true})

vue2深度监听

data(){
	return {
		user:{
			name:"张三",
			age:11
			}
			}
	}
// 监听响应式对象所有属性
user:{
	handler : function(newValue){
	console.log(newValue);
	}
	//表示是否深度监听,侦听器会一层层的向下遍历,给对象每个属性都加上侦听器;性能开销大
	deep:true,
}
// 单独监听某一属性
"user.name":{ //使用字符串的形式
	handler:function(newValue){
	console.log(newValue);
	}
	deep:true//表示是否深度监听,侦听器会一层层的向下遍历,给对象每个属性都加上侦听器
}

6.class与style绑定

在将v-bind 用于 class 和 style时,表达式结果的类型除了`字符串`之外,还可以是`对象或数组`。

class绑定

  • :class里面可以是对象
const isActive = ref(true)
<div :class="{ active: isActive }"></div>
  • class 和 :class 可以共存
<div
  class="static"
  :class="{ active: isActive, 'text-danger': hasError }"
></div>
  • 绑定的对象并不一定需要写成内联字面量的形式,也可以直接绑定一个对象:
const classObject = reactive({
  active: true,
  'text-danger': false
})

<div :class="classObject"></div>
  • 绑定一个计算属性
const isActive = ref(true)
const error = ref(null)

const classObject = computed(() => ({
  active: isActive.value && !error.value
}))
// 如果箭头函数的返回值是一个对象,可以直接省略 return 和花括号 {},将对象包裹在小括号 () 中
<div :class="classObject"></div>
  • 数组语法 (不常用)
const activeClass = ref('active')
const errorClass = ref('text-danger')

<div :class="[activeClass, errorClass]"></div>

// 三元表达式
<div :class="[isActive ? activeClass : '', errorClass]"></div>
// 三元表达式 另一种形式
<div :class="[isActive ? 'active': '', 'text-danger']"></div>
// 数组中嵌套对象
<div :class="[{ [activeClass]: isActive }, errorClass]"></div>

.active {
	font-size:33px;
}
.text-danger {
	color:red;
}

style绑定

  • style的属性值是变量
const activeColor = ref('red')
const fontSize = ref(30)

<div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
// 支持短横杠,用引号包含起来
<div :style="{ 'font-size': fontSize + 'px' }"></div>
  • 绑定样式对象
const styleObject = reactive({
  color: 'red',
  fontSize: '30px'
})

<div :style="styleObject"></div>

绑定数组

// 绑定多个样式对象
<div :style="[baseStyles, overridingStyles]"></div>

7.条件渲染

  • v-if v-else
const awesome = ref(true);

<h1 v-if="awesome">Vue is awesome!</h1>
<h1 v-else>Oh no 😢</h1>
  • <template> 上的 v-if
    <template>不会被渲染
<template v-if="ok">
  <h1>Title</h1>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</template>
  • v-show

v-show 不支持在 元素上使用,也不能和 v-else 搭配使用。

<h1 v-show="ok">Hello!</h1>
  • v-if 和 v-show 区别

v-show:会在 DOM 渲染中保留该元素;v-show 仅切换了该元素上名为 display 的 CSS 属性;如果需要频繁切换,则使用 v-show 较好;
v-if:只有后面为false,对应的元素以及子元素都不会被渲染,控制dom元素的创建和销毁,运行时条件很少改变,一次性的

8.列表渲染

  • v-for 渲染数组
  • v-for 渲染对象
const myObject = reactive({
  title: 'How to do lists in Vue',
  author: 'Jane Doe',
  publishedAt: '2016-04-10'
})

获取对象的键值

<ul>
  <li v-for="value in myObject">
    {{ value }}
  </li>
</ul>

获取对象的键名、键值

<li v-for="(value, key) in myObject">
  {{ key }}: {{ value }}
</li>

获取对象的索引、键名、键值

<li v-for="(value, key, index) in myObject">
  {{ index }}. {{ key }}: {{ value }}
</li>
  • 通过 key 管理状态
    当数据项的顺序改变时,Vue 不会随之移动 DOM 元素的顺序,而是就地更新每个元素,确保它们在原本指定的索引位置上渲染。
    为了给 Vue 一个提示,以 便它可以跟踪每个节点的标识,从而重用和重新排序现有的元素,需要为每个元素对应的块提供一个唯一的 key 属性

  • 数组变化侦测
    Vue 能够侦听响应式数组的变更方法,并在它们被调用时触发相关的更新。这些变更方法包括:

    push():数组末尾后添加元素
    pop():删除数组末尾元素
    shift():删除数组首位元素
    unshift():数组首位添加元素
    splice():
    (1): splice(1,2) 在数组索引为1的下标开始删除2个元素
    (2): splice(1,0,5,6) 在数组索引为1的下标开始添加2个元素5和6
    (3): splice(1,2,5,6) 在数组索引为1的下标开始的2个元素替换为5和6
    sort():默认从小到大排序
    reverse():翻转数组

9.事件处理

  • 内联事件处理器: 简单场景
<button @click="count++">Add 1</button>
<p>Count is: {{ count }}</p>

const count = ref(0)
  • 方法事件处理器
<!-- `greet` 是上面定义过的方法名 -->
<button @click="greet">Greet</button>

const name = ref('Vue.js')

function greet(event) {
  // `event` 是 DOM 原生事件
  if (event) {
    alert(event.target.tagName)
  }
}
  • 方法与内联事件判断

foo、foo.bar 和 foo[‘bar’] 会被视为方法事件处理器,而 foo() 和 count++ 会被视为内联事件处理器。

  • 在内联处理器中调用方法
<button @click="say('hello')">Say hello</button>

function say(message) {
  alert(message)
}
  • 在内联事件处理器中访问事件参数
<!-- 使用特殊的 $event 变量 -->
<button @click="warn('Form cannot be submitted yet.', $event)">
  Submit
</button>

<!-- 使用内联箭头函数 -->
<button @click="(event) => warn('Form cannot be submitted yet.', event)">
  Submit
</button>

function warn(message, event) {
  // 这里可以访问原生事件
  if (event) {
    event.preventDefault()
  }
  alert(message)
}

一个事件,绑定多个处理函数

<button @click="func1(), func2()">
  Submit
</button>
  • 事件修饰符
<!-- 单击事件将停止传递到div元素 -->
<div @click="divClick">
	<a @click.stop="doThis"></a>
</div>

<!-- 提交事件将不再重新加载页面,阻止提交事件这个默认行为 -->
<form @submit.prevent="onSubmit"></form>

<!-- 修饰语可以使用链式书写 -->
<a @click.stop.prevent="doThat"></a>

<!-- 也可以只有修饰符 -->
<form @submit.prevent></form>

<!-- 只触发一次回调 -->
<button @click.once="doThis"></button>
  • 按键修饰符
<!-- {keyCode(键盘编码)| keyAlias (键盘的简写)}监听键盘的某个键帽 -->
<input type="text" @keyup.enter="keyUp" />

10.表单输入绑定

  • v-model
<input v-model="text">
  • v-model的实现原理:
<input
  :value="text"
  @input="event => text = event.target.value">

注意v-model在不同表单控件的用法

  • 文本
const message=ref("hello")

<p>Message is: {{ message }}</p>
<input v-model="message" placeholder="edit me" />
  • 多行文本
const message=ref("")

<p style="white-space: pre-line;">{{ message }}</p>
<textarea v-model="message"></textarea>
  • 复选框
const checked=ref(false)

<input type="checkbox" id="checkbox" v-model="checked" />
<label for="checkbox">{{ checked }}</label>
  • 多选框
    选中某个复选框后,将其value属性对应的值添加到数组checkedNames中
const checkedNames = ref([])

<div>Checked names: {{ checkedNames }}</div>

<input type="checkbox" id="jack" value="Jack" v-model="checkedNames" />
<label for="jack">Jack</label>

<input type="checkbox" id="john" value="John" v-model="checkedNames" />
<label for="john">John</label>

<input type="checkbox" id="mike" value="Mike" v-model="checkedNames" />
<label for="mike">Mike</label>
  • 下拉选择框
const selected=ref("")

<div>Selected: {{ selected }}</div>
<select v-model="selected">
    <option>A</option>
    <option>B</option>
    <option>C</option>
</select>
  • 多选
const multiSelected=ref([])

<div>Selected: {{ multiSelected }}</div>

<select v-model="multiSelected" multiple>
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>
  • 值绑定
    将vlaue值由静态变为使v-bind动态绑定
  • 修饰符

1.lazy

<!--"change" 事件后同步更新而不是 "input" -->
<input v-model.lazy="msg" />

2.number

<!-- 用户输入自动转换为数字 -->
<input v-model.number="age" />

3.trim

<!-- 默认自动去除用户输入内容中两端的空格 -->
<input v-model.trim="msg" />

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

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

相关文章

【软件测试】如何设计测试用例? 设计测试用例常用的方法.

目录 一.什么是测试用例?二.总体设计测试用例的万能公式.2.1 功能性能界面兼容易用安全2.2 弱网测试2.3 安装卸载测试. 三. 常用设计具体测试用例的方法3.1 等价类3.2 边界值3.3 正交法3.3.1 正交表3.3.2 如何设计正交表,并根据正交表编写测试用例 3.4 判定表法3.4.1 根据判定…

红日药业携手实在智能,构建RPA数字员工平台满足业务一体化需求 | 实在RPA案例

近日&#xff0c;天津红日药业股份有限公司&#xff08;简称“红日药业”&#xff09;与实在智能达成合作&#xff0c;依托实在智能业内领先的AIRPA技术&#xff0c;红日药业着手构建企业数字员工平台&#xff0c;满足业务一体化需求&#xff0c;培育新质生产力&#xff0c;为企…

基于PHP的电脑线上销售系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于phpMySQL的电脑线上销售系…

小程序服务零工市场

零工市场小程序有着信息发布、岗位匹配、线上接单、零工人员保障险参保、技能培训、费用结算、完工确认、服务评价、纠纷调解等功能&#xff0c;为求职者和雇主搭建一座高效、便捷、精准的对接桥梁。 用工单位通过小程序的“雇主找人”&#xff0c;发布招聘信息&#xff0c;找到…

react-native连接android原生模块

目录 搭建react-native项目 搭建node和jdk的环境 搭建Android的环境 创建React-native项目 运行react-native项目 下载夜神模拟器 使用adb连接夜神浏览器。 运行react-native项目 编写原生安卓的apk android studio中编写原生代码 在React-native编写代码。 搭建rea…

【干货分享】2024软件测试面试题汇总

前言 本篇分享的软件测试面试题内容主要包括&#xff1a;测试总体、需求分析、测试计划、测试策略、测试用例、缺陷报告、测试总结报告、白盒测试、单元测试、集成测试、系统测试、验收测试等等26个模块。 1. 什么是软件测试&#xff1f; 答&#xff1a;为了发现程序中的错误…

滚动条指定距离滚动

/*** scroller 滚动条元素* to 滚动到位置* duration 滚动时间*/ function scrollLeftTo (scroller, to, duration) {let rafIdlet count 0const from scroller.scrollLeftconst frames duration 0 ? 1 : Math.round((duration * 1000) / 16)function cancel () {cancelAn…

学习CubeIDE——定时器开发

在b站上学习洋桃电子关于HAL库开发&#xff0c;发现使用CubeIDE是真的简单又方便。 实验现象&#xff1a;使用定时器来产生中断&#xff0c;中断程序是LED灯翻转 在我看来&#xff0c;定时器&#xff0c;是一个从0开始增1&#xff08;常规&#xff09;&#xff0c;增加到一定…

存量新篇,商机无限,2024中国重庆建博会将于下月开展

在步入存量房时代的全新篇章中&#xff0c;中国家居建材行业正孕育着前所未有的转型机遇与商业蓝海。重庆作为西南地区的璀璨明珠与战略要地&#xff0c;以前所未有的决心与力度&#xff0c;推进实施了旧改局改与以旧换新等一系列创新政策。 《关于加快推进中心城区旧城改造工…

心觉:小时候常听到的这些教导,正在禁锢你的人生,该翻身了

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作175/1000天 小时候&#xff0c;我们常常被父母或老师教导&#xff1a; 不要去打扰别人 不要影响别人 不要出头 人多要往后站 …

【免费下载】信通院的DCMM标准解读

荐言&#xff1a;深入解读信通院DCMM标准&#xff0c;引领数据管理新高度在数字化转型的浪潮中&#xff0c;数据管理已成为企业核心竞争力的重要组成部分。中国信息通信研究院&#xff08;信通院&#xff09;发布的《数据管理能力成熟度评估模型》&#xff08;DCMM&#xff09;…

OpenAi assistant run always fails when called from PHP

题意&#xff1a;从 PHP 调用时&#xff0c;OpenAI 助理运行总是失败。 问题背景&#xff1a; The runs I create with the openai-php library fail direct in 100% of cases. What am I doing wrong? I do not have much experience with php but this is the test script.…

屏幕翻译软件实时工具有哪些?剧粉朋友看这里

日常生活的忙碌之余&#xff0c;观看剧集成为放松心情的绝佳方式。 但当遇到非母语的影视作品时&#xff0c;语言差异可能会让人感到难以投入。 幸运的是&#xff0c;现在有了屏幕翻译软件&#xff0c;我们不再需要为听不懂外语而烦恼。 这些软件能够在你观看剧集时即时翻译…

MySQL索引知识个人笔记总结(持续整理)

本篇笔记是个人整理的索引知识总结&#xff0c;刚开始有点乱&#xff0c;后续会一直边学边整理边总结 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。就好比索引就是数据的目录 索引结构 Btree索引,Hash索引,Full-text索引&#xff0c;R-tree(空…

SpringBoot+Vue+MySQL驾校预约管理系统

目录 前言 功能设计 系统实现 获取源码 博主主页&#xff1a;百成Java 往期系列&#xff1a;Spring Boot、SSM、JavaWeb、python、小程序 前言 随着社会的进步&#xff0c;各行各业都在充分利用信息化时代的优势。由于计算机技术的广泛应用和普及&#xff0c;各种信息系统…

8年测试工程师 —— 如何使用Playwright优化测试性能!

优化Playwright测试性能是确保自动化测试快速、可靠地执行的重要环节。以下是一些具体的策略和技术&#xff0c;可以帮助你提高Playwright测试的性能&#xff1a; 1. 减少不必要的页面加载 避免重定向&#xff1a;确保测试URL直接指向最终页面&#xff0c;避免不必要的重定向。…

罗马数字详解

一. 罗马数字の背景 1. 罗马数字的诞生与进化 罗马数字起源于古罗马帝国&#xff0c;拥有一个漫长而复杂的历史&#xff0c;始于公元前 8 世纪至 9 世纪&#xff0c;与古罗马帝国在帕兰丁山&#xff08;Palantine Hill&#xff09;周围建立的时间大致相同。不过&#xff0c;罗…

【网络编程】socket套接字|sockaddr|sockaddr_in|通信过程

目录 ​编辑 源IP地址和目的IP地址 Socket 网络字节序 socket编程接口 sockaddr结构 sockaddr sockaddr_in(IPv4) sockaddr_in(IPv6) 完整的套接字&#xff08;socket&#xff09;通信过程 创建socket套接字 bind绑定套接字 listen建立监听 accept接受连接 connect…

错题集锦之C语言

直接寻址和立即寻址 算法的又穷性是指算法程序的运行时间是有限的 未经赋值的全局变量值不确定 集成测试是为了发现概要设计的错误 自然连接要求两个关系中进行比较的是相同的属性&#xff0c;并且进行等值连接&#xff0c;在结果中还要把重复的属性列去掉 赋值运算符 赋值…

CAFE: Catastrophic Data Leakage in Vertical Federated Learning(纵向联邦学习)

NeurIPS 2021 发表单位&#xff1a;美国伦斯勒理工学院、IBM研究院、国立阳明交通大学 GitHub&#xff1a;https://github.com/DeRafael/CAFE 摘要&#xff1a; 梯度共享机制&#xff08;批处理&#xff09;会泄露私有数据—>提出数据泄露攻击CAFE—>提出缓解CAFE对策 在…