vue基础(总结很详细)

news2024/10/10 13:25:26
vue 基础
1. vue 是什么?
Vue.js (读音 /vju ː /, 类似于 view ) 是一套构建用户界面的渐进式框架。
Vue 只关注视图层, 采用自底向上增量开发的设计。
Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
官网地址 API https://cn.vuejs.org/v2/guide/index.html
2. MVVM 是什么?
MVC 拆分解释:
视图( View ):用户界面。
控制器( Controller ):业务逻辑
模型( Model ):数据保存
MVC 通信方式
View 传送指令到 Controller
Controller 完成业务逻辑后,要求 Model 改变状态
Model 将新的数据发送到 View ,用户得到反馈
MVC 框架局限性
View 里会包含业务逻辑
View 当中的业务逻辑无法重用
模型的代码少,控制器的代码却是越写越多
MVVM 拆分解释:
Model: 负责数据存储
View: 负责页面展示
View Model: 负责业务逻辑处理(比如 Ajax 请求等),对数据进行加工后交给视图展示
3. 为什么要使用 MVVM
1. 低耦合。视图( View )可以独立于 Model 变化和修改,一个 ViewModel 可以绑定到不同
"View" 上,当 View 变化的时候 Model 可以不变,当 Model 变化的时候 View 也可以不变
2. 可重用性。你可以把一些视图逻辑放在一个 ViewModel 里面,让很多 view 重用这段视图逻辑
3. 独立开发。开发人员可以专注于业务逻辑和数据的开发( ViewModel ),设计人员可以专注
于页面设计
5. Vue.js 起步
实现步骤
第一步:下载 Vue.js 库并引入
<script type="text/javascript" src="vue.js"></script>

第二步 :创建 view 视图
<div id="box"> //确定一个范围,表示此范围内部都是 vue解析出来的
<h1> {{ msg }} </h1>
</div>

第三步 通过 Vue 实例化一个 vue 对象
​
var vm = new Vue({
el: '#box', // el:‘选择器’
data: {
msg: 'hello, world!'
},
// 实例中,可以设置很多配置项
});

​

第四步 使用数据
data 中变量 msg 放在 #box 内的双花括号内
修改 data 中的 msg ,会同步显示在页面中
实现原理分析
DOM 监听
视图层发生变化, DOM 监听到之后,会传到逻辑层进行处理
数据绑定
逻辑层把数据处理完成之后,通过数据绑定,把处理后的结构返回给视图层
6. 插值表达式
使用双大括号来包裹 js 代码构成插值表达式 , 如: {{msg}}
插值表达式将双大括号中的数据替换成对应属性值进行展示 , 也叫模板语法
插值表达式中可以写入哪些内容?
1. JSON 数据
<div id="wzy">
<p>{{obj.name}}</p>
</div>
<script>
new Vue({
el: '#wzy',
data: {
message: 'hello world',
obj:{ //插入json数据
name:'tom',
age:20
}
}
})
</script>

2. 数字 <p>{{ 10 }}</p>
3. 字符串 {{ "wzy" }}
4. 表达式 <h1>{{ 2>3?'true':'false' }}</h1>
注意:在表达式中可以调用 js 函数。如 {{msg.charAt(0)}}
7. Vue 指令
什么是 Vue.js 指令
指令( Directive )是特殊的带有 v- 前缀的特性
7.1 v-if 指令
被称为条件渲染指令,它根据表达式的真假来插入和删除元素
v-if = ' 表达式 '
根据表达式结果的真假,确定是否显示当前元素
true 表示显示该元素; false 表示隐藏该元素
<div id="wzy">
<p v-if="isShow">表达式的值为真,我就能显示</p>
</div>
var app3 = new Vue({
el: '#wzy',
data: {
isShow: true
}
})
7.2 v-else 指令
v-else 指令为 v-if 添加一个 “else v-else 元素必须立即跟在 v-if 元素的后面,否则不能被识别
v-else 后面不需要表达式
v-if true ,后面的 v-else 不会渲染到 HTML
v-if false ,后面的 v-else 才会渲染到 HTML
<body>
<div id="wzy">
<h1 v-if="isShow">表达式的值为真,我就能显示</h1>
<h1 v-else>v-if不成立的时候,我就显示出来了</h1>
</div>
</body>
<script src="js/vue.js"></script>
<script>
new Vue({
el: '#wzy',
data: {
isShow: false
}
})
</script>

7.3 v-show 指令
控制切换一个元素的显示和隐藏
v-show = ‘ 表达式
根据表达式结果的真假,确定是否显示当前元素( true 表示显示该元素; false 表示隐藏该元素)
<div class="div1" v-show='isShow'></div>

v-if v-show 区别
v-show 指令的元素始终会被渲染到 HTML
它只是简单地为元素设置 CSS style 属性。当不满足条件的元素被设置 style="display:none" 样式
v-if 指令满足条件是,会渲染到 html 中,不满足条件时,是不会渲染到 html 中的
v-if v-show 应用场景
v-if 指令有更高的 切换消耗
v-if 当条件成立的时候会将元素加上,不成立的时候,就会移除 dom ,并且内部的指令不会执行
v-show 指令有更高的 初始渲染消耗
v-show 只是简单的隐藏和显示
如果需要频繁切换使用 v show 较好,如果在运行时条件不大可能改变 使用 v if 较好
7.4 v-on 指令
HTML 元素绑定事件监听
v-on :事件名称 =‘ 函数名称 ()’ @ 事件名称 =‘ 函数名称 ()’
<button v-on:click='fn()'>toggle</button>
//v-on: 可以简写成 @
<button @click='fn()'>toggle</button>
<body>
<div id="wzy">
<a v-on:click="show()">点击测试</a>
</div>
</body>
<script src="js/vue.js"></script>
<script>
new Vue({
el: '#wzy',
data: {
},
methods: {
show:function(){
alert("测试");
}
}
})
</script>

注意:函数定义在 methods 配置项中
案例:
<style type="text/css">
.div1 {
width: 100px;
height: 100px;
background: red;
margin-top: 20px;
}
</style>
<body>
<!-- view -->
<div id="box">
<!--第一种:click事件直接绑定一个方法,没有参数情况下,方法后面的括号可以去掉-->
<!-- <button v-on:click='fn()'>toggle</button> -->
<button v-on:click='fn'>toggle</button>
<!-- v-on: 可以简写成 @ -->
<!-- <button @click='fn()'>toggle</button> -->
<br/>
<div class="div1" v-show='bol'></div>
<!--第二种:传参情况下,click事件使用内联语句-->
<button v-on:click="say('Hi')">Hi</button>
</div>
</body>
<script src="js/vue.js"></script>
<script type="text/javascript">
// 实例化对象
var vm = new Vue({
el: '#box',
data: {
// 数据
bol: false
},
// 事件统一写在methods里面
methods: {
fn: function() {
this.bol = !this.bol;
},
say: function(msg) {
alert(msg);
}
}
});
</script>

< 7.5 v-model 指令
能轻松实现表单输入和应用状态之间的 双向绑定
双向绑定
指的是我们在 vue 实例中的 data 与其渲染的 dom 元素上的内容保持一致,两者无论谁被改变,另
一方也会相应的更新为相同的数据
v-model = ‘ 变量
v-model 指令只能用在
</span></p><pre>等这些表单元素

<body>
 <div id="box">
        <input type="text" v-model='msg'></input>
        <h1>{{ msg }}</h1>
        <!-- 
            v-model:进行双向绑定的(把用户输入的内容,同步显示在页面上)
            语法:v-model='变量'
            注:使用在表单元素上(常用在 type类型为text 上)
 -->
    </div>
</body>
</html>
<script type="text/javascript">
    var vm = new Vue({
        el: '#box',
        data: {
            msg: 'hello'
       }
   });
</script>

7.6 v-bind 指令

v-bind 可以在其名称后面带一个参数,参数通常是 HTML 元素的特性( attribute ), v-bind 是动态绑定指令,默认 情况下自带属性的值是固定的,为了能够动态的给这些属性添加值可以使用v-bind 指令
v-bind: 属性名 = ‘ 表达式
简写形式: v-bind 可以省略,直接书写为 : 属性名 = ‘ 表达式
<img v - bind:src="imageSrc"> 等价于 <img :src="imageSrc"> // 绑定一个属性
       
<div id="box">
<!-- 第一种:图片的url地址 -->
<img v-bind:src="imageSrc">
<!-- 第二种:动态类名 v-bind:class={类名:表达式} -->
<div v-bind:class="{ divclass: isRed }"></div>
</div>
<script type="text/javascript">
var vm = new Vue({
el: '#box',
data: {
// 第一种:图片地址
imageSrc: "images/1.png",
// 第二种:class类名
isRed: true
}
});
</script>

7.7 v-for 指令
遍历 data 中的数据,并在页面进行数据展示
v-for = ‘(item, index) in items’
1. item 表示每次遍历得到的元素
2. index 表示 item 的索引,可选参数
3. items 表示数组或者对象
<body>
<div id="app">
<ul>
<!-- 1、遍历对象
value :表示对象的属性值
key :当前对象的属性名
index:当前对象的索引值
-->
<!-- <li v-for="(value, key, index) in person">
{{index}} - {{key}} - {{value}}
<br>
</li> -->
<!-- 2、遍历数组
item: 代表遍历的每一个数组对象
index:当前数组对象的索引值
-->
<!-- <li v-for="(item,index) in lesson">
{{index}} - {{item.name}} - {{item.type}}
<br>
</li> -->
<!-- 3、双层嵌套
把课程中内容遍历出来
-->
<!-- <li v-for="(item,index) in lesson">
<span v-for="(childValue,index) in item.type">
{{index}} - {{childValue}} <br>
</span>
</li> -->
<!-- 4、key 属性 :更高效的去重用和重新排序现有元素
为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每
项提供一个唯一 key 属性。理想的 key 值是每项都有的且唯一的 id。
建议尽可能在使用 v-for 时提供 key,除非遍历输出的 DOM 内容非常简单
key的工作方式类似于一个属性,所以你需要用 v-bind 来绑定动态值 ,这里使用简写形式完成
-->
<li v-for="(item,index) in lesson" :key="index">
<!-- 这的 index是 唯一的存在,可以使用,如果有其他的也可以使用 -->
{{index}} - {{item.name}} - {{item.type}}
<br>
</li>
</ul>
</div>
</body>
</html>
<script type="text/javascript">
var vm = new Vue({
el: '#app',
data: {
person: {
name: 'zfpx',
age: 7,
},
lesson: [
{ name: '前端三大块', type: ['HTML', 'CSS', 'JavaScript'] },
{ name: '前端三大框架', type: ['vuejs', 'react', 'angularjs'] },
]
}
});
</script>
8. 总结
v-if :根据表达式的真假来插入和删除元素
v-else v-else 指令为 v-if 添加一个 “else
v-show :控制切换一个元素的显示和隐藏
v-on :为 HTML 元素绑定事件监听
v-model :将用户的输入同步到视图上
v-bind :绑定 HTML 元素的属性
v-for :遍历 data 中的数据,并在页面进行数据展示
vue 优点
简洁: HTML 模板 、 Vue 实例 、 JSON 数据
轻量: 35K ,性能好
渐进式:边学边用
设计思想:视图与数据分离,无需操作 DOM
社区:大量的中文资料和开源案例

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

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

相关文章

Day2 IDEA

使用IDEA开发第一个程序 代码结构&#xff1a;Project - Module - Package - Class 作用&#xff1a;便于管理代码 例如&#xff1a; 创建一个空工程 创建module模块 创建package&#xff0c;一般以公司域名倒写技术名称 例如&#xff1a;com.test.hello 创建类 class He…

使用QFileInfo类判断同名文件存在

问题描述:使用QT保存文件时&#xff0c;如果文件名相同&#xff0c;保存后原来的文件会被覆盖引用博客 首先在QT项目中新建一个按钮 再右击选择转到槽&#xff0c;这时候就会跳转到刚刚生成的槽函数 代码 void MainWindow::on_pushButton_5_clicked() {QString fileName QF…

nginx 资料整理(一)

nginx 1. 简介2. web服务器2.1 相关文件2.2 主配置文件1. 全局块&#xff08;events之前的部分&#xff09;2. events块&#xff08;events{...}&#xff09;3. http块&#xff08;http{...}&#xff09; 2.3 子配置文件 官网 https://nginx.org/ 1. 简介 nginx (engine x) 是…

DeerPlus 2.85| 外语学习利器,趣味闯关学习外语

DeerPlus 是一款非常专业的外语学习应用&#xff0c;支持多种语言的学习&#xff0c;如汉语、英语、日语、韩语、法语、西班牙语、德语等&#xff0c;从单词、发音、语法等各个方面全面系统地教你学习&#xff0c;让你快速掌握多种语言。特点&#xff1a;- 10多种游戏模式- 100…

计算机毕业设计 基于Python音乐平台的设计与实现 Python毕业设计 Python毕业设计选题 Vue 前后端分离【附源码+安装调试】

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

C++核心编程和桌面应用开发 第九天(静态多态 动态多态 纯虚函数 抽象类 虚析构 纯虚析构 向上向下类型转换 重载重写重定义)

目录 1.1静态多态 1.2动态多态 1.2.1满足条件 1.2.2动态多态的使用条件 1.3纯虚函数和抽象类 1.3.1纯虚函数 1.3.2抽象类 1.4虚析构/纯虚析构 1.5向上向下类型转换 1.5.1向下类型转换 1.5.2向上类型转换 1.5.3多态中的类型转换 1.6重载重写重定义 1.6.1重载 1.6…

中国工业大模型行业发展研究报告

**工业大模型伴随着大模型技术的发展&#xff0c;逐渐渗透至工业&#xff0c;处于萌芽阶段。**就大模型的本质而言&#xff0c;是由一系列参数化的数学函数组成的计算系统&#xff0c;且是一个概率模型&#xff0c;其工作机制是基于概率和统计推动进行的&#xff0c;而非真正的…

leetcode 93.复原ip地址

1.题目要求&#xff1a; 2.题目代码: class Solution { public:vector<string> result;// 记录结果// startIndex: 搜索的起始位置&#xff0c;pointNum:添加逗点的数量void backtracking(string& s, int startIndex, int pointNum) {if (pointNum 3) { // 逗点数…

线性回归逻辑回归-笔记

一、线性回归&#xff08;Linear Regression&#xff09; 1. 定义 线性回归是一种用于回归问题的算法&#xff0c;旨在找到输入特征与输出值之间的线性关系。它试图通过拟合一条直线来最小化预测值与真实值之间的误差。 2. 模型表示 线性回归模型假设目标变量&#xff08;输…

Vue3浮动按钮(FloatButton)

效果如下图&#xff1a;在线预览 APIs FloatButton 参数说明类型默认值left按钮定位的左边距&#xff0c;单位 pxnumber | stringundefinedright按钮定位的右边距&#xff0c;单位 pxnumber | string24top按钮定位的上边距&#xff0c;单位 pxnumber | stringundefinedbottom…

优惠点餐api接口对接的具体步骤是什么?

优惠点餐API接口对接的具体步骤通常包括以下几个阶段&#xff1a; 需求分析&#xff1a;明确对接的目标和需求&#xff0c;例如实现在线点餐、订单管理、支付集成等 。选择API服务提供商&#xff1a;根据业务需求选择合适的点餐API服务提供商 。注册和获取API密钥&#xff1a;…

channel是pypi与 https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-f的区别。

pypi.org 是 PyPI 的默认源https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-f 是清华大学开源软件镜像站提供的 Anaconda 镜像源之一。 pypi.org&#xff1a;通常通过 pip 工具来使用。 https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-f&#xff1a;…

力扣HOT100合集

力扣HOT100 - 1. 两数之和 解题思路&#xff1a; 解法一&#xff1a;暴力 class Solution {public int[] twoSum(int[] nums, int target) {int n nums.length;for (int i 0; i < n; i)for (int j i 1; j < n; j) {if (target nums[i] nums[j])return new int[] …

docker compose一键部署容器监控 CAdvisor+InfluxDB+Granfana

docker compose一键部署容器监控 CAdvisorInfluxDBGranfana CAdvisor监控收集InfluxDB存储数据Granfana展示图表 1、原生命令 通过docker stats 命令可以查看当前宿主机上所有创建的容器的CPU,内存和网络流量等信息 docker stats 缺点&#xff1a;只能查看当前宿主机的全部…

Pymysql cur.fetchall() 返回 None

大家在pymysql 的 cur.fetchall() 函数通常用于获取执行 SQL 查询后的所有结果。该函数返回一个包含查询结果的元组列表。如果 cur.fetchall() 返回 None&#xff0c;可能是由于以下多种问题导致的。 1、问题背景 在使用 Pymysql 库连接到 MySQL 数据库时&#xff0c;遇到这样…

革新锂电池PACK线:重塑生产效能新高度

背景&#xff1a; 在新能源产业的浪潮中&#xff0c;锂电池作为电动汽车、储能系统的核心部件&#xff0c;其生产效率与质量直接关系到整个产业链的竞争力。然而&#xff0c;在锂电池PACK线的生产、运输、检测这一完整流程中&#xff0c;运输环节往往面临着诸多挑战&#xff0…

探索多模态大模型的最佳技术路线

视觉-语言模型&#xff08;Vision-Language Models, VLMs&#xff09;领域正迅速发展&#xff0c;但在数据、架构和训练方法等关键方面还未达成共识。本文旨在为构建VLM提供指南&#xff0c;概述当前的最先进方法&#xff0c;指出各自的优缺点&#xff0c;解决该领域的主要挑战…

AD的多边形覆铜挖空

针对多层板中没有网络的焊盘&#xff0c;需要覆铜挖空&#xff0c;避免与GND连接。同时&#xff0c;大多数情况下&#xff0c;我们的板子上都有定位孔&#xff0c;如果覆铜边界和定位孔边界距离过近&#xff0c;当拧螺丝时&#xff0c;螺丝会压在覆铜上&#xff0c;甚至在螺丝旋…

漫途以产品为导向,为集成商客户提供稳定、可靠的物联网终端设备!

无锡漫途科技有限公司成立于2014年8月至今已经十年有余&#xff0c;在这期间公司始终把“1344”战略作为核心指导方向。 “1”代表只做一件事&#xff0c;即以“物联网基础大数据服务商”为主要业务定位&#xff0c;围绕中国制造 2025&#xff0c;推动中国工业智能化转型升级&…

安卓投屏工具:QtScrapy

QtScrcpy可以通过USB(或通过TCP/IP)连接Android设备&#xff0c;并进行显示和控制。不需要root权限。   项目地址https://gitee.com/leihongping/QtScrcpy