Vue新手入门

1 Vue概述

官网:https://cn.vuejs.org/

1、什么是Vue.js

Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助于Weex)
Vue.js 是前端的主流框架之一,和Angular.js、React.js 一起,并成为前端三大主流框架!
Vue.js 是一套构建用户界面的框架,只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合。(Vue有配套的第三方类库,可以整合起来做大型项目的开发)
前端的主要工作?主要负责MVC中的V这一层;主要工作就是和界面打交道,来制作前端页面效果;

2、框架和库的区别

框架:是一套完整的解决方案;对项目的侵入性较大,项目如果需要更换框架,则需要重新架构整个项目
库(插件):提供某一个小功能,对项目的侵入性较小,如果某个库无法完成某些需求,可以很容易切换到其它库实现需求。
JQuery:封装js的类库,项目导入xx.css xxx.js

2 Vue入门案例

Vue基础这块,我们是基于vue.js做开发的。所以使用vue的基本流程有以下三步:

引入vue.js文件
定义vue视图控制区域
创建vue对象

代码如下所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b89e0f0bfc004e06b3f6970a13d72f2d.png#pic_center
helloworld案例代码解读:Vue实例的选项(重要)

el
- 作用:当前Vue实例所管理的html视图
- 值:通常是id选择器(或者是一个 HTMLElement 实例)
- 不要让el所管理的视图是html或者body
data
- Vue 实例的数据对象,是响应式数据(数据驱动视图)
- 可以通过 vm.$data 访问原始数据对象
- Vue 实例也代理了 data 对象上所有的属性,因此访问 vm.a 等价于访问 vm.$data.a
- 视图中绑定的数据必须显式的初始化到 data 中
methods
- 其值为可以一个对象
- 可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用
- 方法中的 this 自动绑定为 Vue 实例。
- 注意,不应该使用箭头函数来定义 method 函数(例如 plus: () => this.a++)。理由是箭头函数绑定了父级作用域的上下文,所以 this 将不会按照期望指向 Vue 实例,this.a 将是 undefined

3 MVVM思想

MVVM思想是vue代码执行的流程体现,跟我们之前学过的后端MVC思想有些相似。

MVC是后端的分层开发概念:
在这里插入图片描述

MVC是比较直观的架构模式,用户请求->Controller(业务逻辑处理)->Model(数据持久化),Controller(业务逻辑处理)->View(将结果反馈给View)

MVVM是前端视图层的概念,主要关注于 视图层分离,也就是说:MVVM把前端的视图层,分为了 三部分 Model, View , VM ViewModel
在这里插入图片描述

MVVM是将“数据模型数据双向绑定”的思想作为核心,因此在View和Model之间没有联系,通过ViewModel进行交互,而且Model和ViewModel之间的交互是双向的,因此视图的数据的变化会同时修改数据源,而数据源数据的变化也会立即反应到View上。
在这里插入图片描述

以HelloWorld为例,我们如何解读代码中的MVVM呢?
在这里插入图片描述

4 Vue插值语法

作用:会将绑定的数据实时的显示出来:类似jsp显示数据${属性名}

语法:

{{js表达式、三目运算符、方法调用等}}

举例:

js表达式:1+num

通过任何方式修改所绑定的数据,所显示的数据都会被实时替换

{{js表达式、三目运算符、方法调用等}}

注意:不能写JS语句,如:var a=10; 分支语句 循环语句

<!-- 在插值表达式中可以访问vm实例中data里面的属性 -->

{{message}}

<p>{{message}}</p><p>{{message+'啦啦啦'}}</p><p>{{age>18?'成年':'未成年'}}</p><p>{{message.split("")}}</p><!-- 在插值表达式中不能写js语句 --><p>{{var a = 10}}</p>

5 Vue指令のv-text和v-html

什么是Vue指令

指令 (Directives) 是带有 v- 前缀的特殊特性

指令特性的值预期是单个JavaScript表达式(v-for 是例外情况,稍后我们再讨论)

指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM

v-html和v-text

作用:会将绑定的数据实时的显示出来

作用:扩展了html标签的功能、大部分的指令的值是js的表达式, 取代DOM操作

类比Javascript

	你可以使用 jQuery 的功能来类比学习 Vue 的基本功能:

javascriptvue说明innerTextv-text插值表达式,为标签设置文本内容innerHTMLv-html获取或为标签设置内容包含html值

v-text和插值表达式的区别

v-text:会把元素中之前的内容全部清空掉! 更新整个标签中的内容

插值表达式{{}}: 插值表达式只会插入内容,并不会清除其余的内容

v-html:更新标签中的内容/标签,可以渲染内容中的HTML标签

插值语法

插值设置:本身就有一句话:{{text}}


<!-- v-text:等价于innerText,遇到html代码不会解析 v-text会覆盖标签内部原始的内容,而{{}}不会 -->

v-text:本身就有一句话:

<hr><!-- v-html:等价于innerHTML,遇到html代码会解析 -->

v-html:

num1:12

6 Vue指令のv-on

作用:使用v-on指令绑定事件,并在事件被触发时执行一些JavaScript代码

语法:

@事件名 = “methods中的方法名”

v-on:事件名=“methods中的方法名”

​举例

在vue对象内部,如果要使用data的数据,必须使用this.访问,当然,你要也可以定义vue对象名,比如上述代码中vm,利用vm.访问数据也可以
7 Vue指令のv-model

表单元素以外的标签,只能做数据显示:data里面的数据交给div显示,使用{{}} v-text v-html

表单元素除了需要数据显示,还希望将用户修改后的数据反映data中,使用v-model

v-model的作用当做:let info=document.getElementByxx(“”).value

案例:网页计算器

作用

表单元素的绑定

特点

双向数据绑定

数据发生变化可以更新到界面
通过界面可以更改数据
v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值而总是将 Vue 实例的数据作为数据来源。应该在 data选项中声明初始值

案例:网页版简易计算器

<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>网页版简易计算器</title><script src="./vue/vue.js"></script>
<!--1.完成num1 num2从data直接取数据,求和2.尝试从文本框获取数字,求结果。注意:文本默认是num1 num2初始值--><div id="app"><p>数字1:<input type="text" name="" id="" v-model.lazy.number.trim="num1"></p><p>数字2:<input type="text" name="" id="" v-model.lazy.number.trim="num2"></p><p><select name="" id="" v-model="opr"><option value="+">+</option><option value="-">-</option><option value="*">*</option><option value="/">/</option><option value="%">%</option></select></p><p><button v-on:click="getResult()">计算</button></p><div>计算结果是:{{result}}</div></div>

v-model修饰符

Vue 中针对v-model在输入框中的使用,提供了三个修饰符:

.lazy:将输入框的 input 事件切换为 change 事件;
.number:自动将用户的输入值转为数值类型;
.trim:自动过滤用户输入的首尾空白字符。

v-model在默认情况下,是用户在修改输入框值的同时,data 中对应的数据会立马发生改变。而.lazy修饰符的作用,就是让用户在修改输入框值时不会立马改变 data 中的数据,而是等用户输入完成输入框失去焦点时才将输入框的值更新到 data 的数据中。

案例1:简易计算器

<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>v-model 双向绑定</title><!-- 1.html引入vue.js支持当前页面可以使用vue的语法或函数 --><script src="./vue/vue.js"></script>
<!-- 2.提供vue数据显示的区域 --><div id="app"><h2>{{username}}的字符个数:{{username.length}}</h2><hr><!--.lazy:将输入框的 input 事件切换为 change 事件;.number:自动将用户的输入值转为数值类型;.trim:自动过滤用户输入的首尾空白字符。-->请输入用户名:<input type="text" name="" id="" v-model.lazy.trim="username"><hr><h2>{{typeof num}}</h2><input type="text" name="" id="" v-model.lazy.trim.number="num"></div>

v-model获取不同表单项的值

绑定文本框

效果:当文本框的值发生变化后,div中的内容也会发生变化

  <p>{{message}}</p><input type='text' v-model='message'><hr><!-- v-model其实是语法糖,它是下面这种写法的简写 --><input v-bind:value='message' v-on:input='message = $event.target.value' />

绑定多行文本

    <textarea v-model="message">我是textarea内的插值表达式 无效 {{str}}</textarea><div>{{ message }}</div></div><script src="./vue.js"></script><script>var vm = new Vue({el: '#app',data: {message: 'message默认值',str: 'str字符串'}});</script>

绑定复选框

复选框的使用可以分为两种情况:

获取复选框的选中状态;
获取复选框的选中内容;

获取复选框的选中状态

isAgree是布尔类型的数据

{{ isAgree }}

new Vue({

el:“#app”,

data() {

return {isAgree: false}

}

});

获取复选框的选中内容

此种方式需要input标签 提供value属性

v-model绑定的是 数组-

<div id="app"><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><br><span>Checked names: {{ checkedNames }}</span></div></div>

绑定单选框

需要input提供value属性的值

{{sex}}

绑定下拉列表

    <select v-model="selected"><option disabled value="">请选择</option><option>北京</option><option>上海</option><option>深圳</option></select> <span> 您选择的是: {{selected}}</span>

8 Vue指令のv-bind

作用

可以绑定标签上的任何属性

v-bind指令的三种用法:

  1. 直接使用指令 v-bind:属性名

  2. 使用简化指令 :属性名

  3. 在绑定的时候,拼接绑定内容::title=“btnTitle + ‘, 这是追加的内容’”

案例

<div id="app"><a v-bind:href="url" target="_blank">百度</a><hr><a v-bind:href="'http://www.baidu.com?id='+id">删除</a></div>

提示:v-bind 命令可以简写为 : 形式。个人建议初学者不要使用简写,以免造成记忆负担
9 Vue指令v-if & v-show

v-if和v-show在vue中作用是一样。都是用来根据条件控制某些数据是否需要显示。

v-if和v-show区别

v-if和v-show使用小结

一般来说,v-if 有更高的切换消耗而 v-show 有更高的初始渲染消耗。因此,如果需要频繁切换 v-show 较好,如果在运行时条件不大可能改变,比如初始化加载元素时,指令的值是一个false,v-if 较好技术选型:如果基于条件频繁切换隐藏或显示, v-show更好;如果网页第一次加载时确定条件,以后条件就不再变化了,v-if条件不成立,标签压根就会html里面绘制出来,v-if更好

案例

<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>v-if和v-show</title><script src="./vue/vue.js"></script>
<div id="app"><!-- 控制div满足什么条件才可以显示 --><div v-if="books.length===0">v-if控制:暂无图书信息可显示+++++++++</div><div v-else><h1>图书信息如下所示:</h1></div><hr><!--v-if和v-show区别:相同的:v-if和v-show都实现数据显示不显示的控制区别:v-if在条件不满足时,html的代码中完全提供对应的html代码v-show在条件不满足时,html代码会出现,但是有一个css样式display=none所以,日常使用时v-if和v-show的使用建议是:一般来说,v-if 有更高的切换消耗而 v-show 有更高的初始渲染消耗。因此,如果需要频繁切换 v-show 较好,如果在运行时条件不大可能改变,比如初始化加载元素时,指令的值是一个false,v-if 较好--><div v-show="books.length===0">v-show控制:暂无图书信息可显示***********</div></div>
10 Vue指令v-for【重点】

作用:遍历数据的。类似java中的for循环

循环数组

作用: 根据一组数组或对象的选项列表进行渲染。

v-for 指令需要使用 item in items 形式的特殊语法,

items 是源数据数组 /对象

当要渲染相似的标签结构时用v-for

v-for=“(迭代变量,下标) in 数组”

案例:

<template v-for="(name,i) in names"><input type="radio" name="choose" id="" v-bind:value="name">{{i}}--{{name}}</template>

迭代数组 掌握迭代对象数组

v-for=“(item, i) in 对象数组名”

迭代数字

这是第 {{i}} 个P标签

案例:利用v-for显示图书对象数组,并控制页码循环

<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>v-for案例</title><script src="./vue/vue.js"></script>
<div id="app"><table border="1" cellpadding="8" cellspacing="0"><tr><th>编号</th><th>书名</th><th>单价</th></tr><tr v-for="(book,i) in names"><td>{{book.id}}</td><td>{{book.bookName}}</td><td v-text="book.price"></td></tr><tr><td colspan="3"><span v-for="n in pages" v-bind:class="[pageNum==n ? 'bg' : '', 'page']">{{n}}</span></td></tr></table></div>

迭代对象中的属性

{{val}} --- {{key}} --- {{i}}

案例:

<table border="1" cellpadding="8" cellspacing="0"><tr><th>身份证号码</th><th>姓名</th><th>性别</th><th>年龄</th></tr><tr><td>{{person.id}}</td><td>{{person.name}}</td><td>{{person.sex}}</td><td>{{person.age}}</td></tr><tr><td v-for="(attrValue,attrName) in person">{{attrName}}、{{attrValue}}</td></tr></table>

细节:v-for中的key属性

2.2.0+ 的版本里,当在组件中使 v-for 时,key 现在是必须的

当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用 “就地复用” 策略。如果数据项的顺序被改变,Vue将不是移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。

为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性

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

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

相关文章

Bridge 桥接

意图 将抽象部分与其显示部分分离&#xff0c;使他们都可以独立地变化。 结构 其中&#xff1a; Abstraction定义抽象类的接口&#xff0c;维护一个指向Implementer类型对象的指针。RefinedAbstraction扩展由Abstraction定义的接口。Implementor定义实现类的接口&#xff0c…

React 19 的新增功能:Action Hooks

React 是前端开发领域最流行的框架之一。我喜欢 React 是因为它背后的团队和社区对它的热情。当社区提出新功能和改进的需求时&#xff0c;团队会倾听&#xff0c;React 的未来是令人兴奋和有趣的。 让我们来看一下 React 19 中令开发人员提升开发效率的新特性。对于每个钩子&…

关于项目打包

除了自己常用的那种方式&#xff0c;也可以直接在文件夹下执行命令。 如果当前项目聚合了其他子模块的话&#xff1a; 先清理&#xff0c;再打包&#xff0c;同时跳过测试 如果打包后&#xff0c;然后项执行某个模块&#xff0c;进入当前文件夹下直接java -jar 和jar包名执行就…

k8s:kubectl 命令设置简写启用自动补全功能

k8s&#xff1a;kubectl 命令设置简写&启用自动补全功能 1、设置kubectl命令简写2、启用kubectl自动补全功能 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; Kubernetes&#xff08;K8s&#xff09;是一个强大的容器编排平台&#xff0…

恢复MySQL!是我的条件反射,PXB开源的力量...

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

力扣面试150 分发糖果 分步贪心

Problem: 135. 分发糖果 思路 &#x1f468;‍&#x1f3eb; 参考&#xff1a;代码随想录 一次是从左到右遍历&#xff0c;只比较右边孩子评分比左边大的情况。一次是从右到左遍历&#xff0c;只比较左边孩子评分比右边大的情况。 复杂度 时间复杂度: O ( n ) O(n) O(n) …

低成本,高效能:探索物联网新宠LoRa

LoRa是什么&#xff1f; LoRa是一种物联网无线传输技术&#xff0c;利用调制解调器实现低功耗远距离数据传输。其基本工作原理是通过基站发送数据到特定终端设备&#xff0c;实现双向数据传输。 LoRa无线传输技术是一种为低功耗和低成本设计的无线技术&#xff0c;用于实现远距…

【Linux】CentOS 7安装后没有图形界面

专栏文章索引&#xff1a;Linux 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、项目场景 二、问题描述 三、原因分析 四、解决方案 1.当前处于命令行界面&#xff0c;可以切换为图形界面 2.安装时没有安装图形界面&#xff0c;选择了Minimal Install 3.下…

鸿蒙端云一体化开发--开发云函数--适合小白体制

开发云函数 那什么是云函数&#xff1f;我们将来又怎么去使用这个云函数呢&#xff1f; 答&#xff1a;我们之前要编写一些服务端的业务逻辑代码&#xff0c;那现在&#xff0c;在这种端云一体化的开发模式下&#xff0c;我们是把服务端的业务逻辑代码&#xff0c;通过云函数来…

linux安装和使用-第一天

一. 安装linux系统 安装过程:略注意事项: 安装时一定一定一定不要选择有中文的目录包括镜像文件所在的目录,否则会发生各种问题,比如VMware Tools是灰色的.1. 安装ssh工具 (1) 安装命令 # 第一次安装系统需要更新一下apt的源,他维护了软件依赖关系,否则安装不了软件,每次安装…

MT3020 任务分配

思路&#xff1a;利用二分找到某个时间是满足“k个人可以完成” &#xff0c;并且时间最小。 因为尽量让后面的人做任务&#xff0c;所以从后往前排任务&#xff08;倒着分配&#xff09;。从后往前遍历任务&#xff0c;如果此人加上这个任务超出之前求得的时间&#xff0c;就…

快速入门深度学习9.1(用时20min)——GRU

速通《动手学深度学习》9.1 写在最前面九、现代循环神经网络9.1 门控循环单元&#xff08;GRU&#xff09;9.1.1. 门控隐状态9.1.1.1. 重置门和更新门9.1.1.2. 候选隐状态9.1.1.3. 隐状态 9.1.3 API简洁实现小结 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 20…

空指针与野指针的辨析

空指针 空指针不指向任何实际的对象或者函数&#xff0c;反过来&#xff0c;任何的对象或者函数也不可能是空指针。 在程序中得到空指针的办法就是使用预定义的NULL&#xff0c; int *ip NULL; 校验一个指针是否为空指针可以用 if (ip NULL) NULL是标准规定的宏定义&am…

h5 笔记4 表格与表单

<table></table>设置表格&#xff1b; <tr></tr>设置行数&#xff1b; <td></td>设置列数&#xff1b; <caption></caption>设置表格标题&#xff1b; <th></th>设置列标题。 直列&#xff1a;column&#xf…

Pytest精通指南(09)利用Fixture给函数设置别名

文章目录 前言测试用例默认显示传递一个参数传递多个参数 利用Fixture修改测试函数名称传递一个参数传递多个参数 验证ids和params长度不一致修改Fixture函数名称 前言 在 pytest 中&#xff0c;pytest.fixture 装饰器用于定义可以在多个测试函数中重用的设置和清理代码。 name…

虚拟机下CentOS7开启SSH连接

虚拟机下CentOS7开启SSH连接 自己在VMware中装了CentOS 6.3&#xff0c;然后主机&#xff08;或者说xshell&#xff09;与里面的虚拟机连不通&#xff0c;刚学习&#xff0c;一头雾水&#xff0c;查了半天&#xff0c;也不知道怎么弄。 在虚拟机&#xff08;Vmware Workstatio…

OSCP靶场--PayDay

OSCP靶场–PayDay 考点(公共exp文件上传密码复用sudo -l all提权) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC 192.168.153.39 -p- -Pn --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-13 04:52 EDT Nmap scan report for 192…

C语言 | 字符函数和字符串函数

目录&#xff1a; 1. 字符分类函数 2. 字符转换函数 3. strlen的使用和模拟实现 4. strcpy的使用和模拟实现 5. strcat的使用和模拟实现 6. strcmp的使用和模拟实现 7. strncpy函数的使用 8. strncat函数的使用 9. strncmp函数的使用 10. strstr的使用 11. strtok函…

智慧公厕:城市管理的一大创新

公共厕所作为城市基础设施的重要组成部分&#xff0c;不仅仅是提供方便的厕所&#xff0c;更是城市管理的一项创新。随着科技的发展&#xff0c;智慧公厕应运而生。通过物联网、大数据、云计算、网络通信、自动化控制等技术&#xff0c;智慧公厕实现了对公厕内部人体活动状态、…

【算法刷题day22】Leetcode:235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点

文章目录 Leetcode 235. 二叉搜索树的最近公共祖先解题思路代码总结 Leetcode 701. 二叉搜索树中的插入操作解题思路代码总结 Leetcode 450. 删除二叉搜索树中的节点解题思路代码总结 草稿图网站 java的Deque Leetcode 235. 二叉搜索树的最近公共祖先 题目&#xff1a;235. 二…