最新要闻
- 快资讯:“星月童话”来了!月掩金星天象明晚亮相:错过要等3年
- 天天百事通!女生疑在奶茶中喝出10余颗玻璃珠:店家回应
- 视点!黄金定价模式生变背后:央行们正失去对货币环境的控制
- 泉水煮蛋怎么做
- 全球短讯!常用消毒剂无效 致命真菌在美国蔓延:近半感染者90天内死亡
- 《龙马精神》推广曲《真心英雄》MV出炉:成龙郭麒麟重唱经典
- 环球聚焦:二手路虎变法拉利!男子80万买到泡水路虎 车商被判退一赔三
- 今日要闻!尿道结石怎么治疗才能除病根_尿道结石该怎么治疗
- 虚幻引擎5推出重磅新功能MetaHuman Animator:实现真人面部动作高速模拟
- 焦点速看:开放世界元宇宙游戏《仙剑世界》来了:万物皆可交互
- 焦点短讯!中华老字号!西安饭庄糕点礼盒19.9元冲量大促:一次买16枚
- 两女子高速上突然跳车:闻到汽油味、以为要爆炸
- 快讯:河北沧州2022年成人高考成绩查询入口已开通
- 今日观点!女生10年收集万瓶香水价值一套房:圈粉超47万
- 世界热文:捐100亿元建世界一流名校 曹德旺:大学没有教会年轻人动手能力
- 【天天快播报】汽车疯狂降价潮引担忧:狂欢之后会不会是淘汰潮?
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
Vue 核心(一)
- Vue 核心(一)
- 一、 Vue 简介
- 1、 概述
- 2、 学前准备
- 3、 第一个程序
- 二、 模板语法
- 三、 数据绑定
- 四、 MVVM 模型
- 五、 数据代理
- 1、 defineProperty
- 2、 理解数据代理
- 3、 Vue中的数据代理
- 六、 事件处理
- 1、 事件的基本使用
- 2、 键盘事件
- 七、 计算属性与监视属性
- 1、 计算属性的语法
- 2、 计算属性的简写
- 3、 监视属性
- 4、 深度监视
- 5、 监视属性简写
- 一、 Vue 简介
Vue 核心(一)
一、 Vue 简介
1、 概述
Vue是一套用于构建用户界面的渐进式JavaScript 框架。
(资料图)
渐进式:Vue 可以自底向上逐层的应用。
- 简单应用:只需一个轻量小巧的核心库
- 复杂应用:可以引入各式各样的 Vue 插件
如果说是JQuery是手工作坊,那么Vue.js就像是一座工厂,虽然Vue.js做的任何事情JQuery都可以做,但无论是代码量还是流程规范性都是前者较优。
Vue 的特点:
- 采用组件化模式,提供代码复用率、且让代码更好维护
- 声明式编码,让编码人员无需操作 DOM,提高开发效率
- 使用虚拟 DOM+ 优秀的 Diff 算法,尽量复用 DOM 节点
官方网站地址:https://cn.vuejs.org/
我们在最开始学习时会通过script标签来直接引入 Vue;后期会使用脚手架来安装 Vue
2、 学前准备
学习 Vue 之前需要掌握的 JS 基础知识:
- ES6语法规范
- ES6模块化
- 包管理器
- 原型、原型链
- 数组常用方法
- axios
- promise
- ...
3、 第一个程序
我们首先在资源下载处安装我们的 Vue.js ,然后在 HTML 文件中引入:
初始Vue <script src="../js/vue.js"></script> Hello World
在提示中,要求我们安装 Dev 开发者工具:
VueDevTools
同时,我们还需要进行一些配置,来关闭生产提示:
初始Vue <script src="../js/vue.js"></script> Hello World
<script type="text/javascript"> Vue.config.productionTip = false; // 阻止 Vue 在启动时生成生产提示</script>
我们总共进行了三件事情:
- 下载开发版本的 Vue
- 安装了 Vue 开发者调试工具
- 关闭生产提示
小案例:
初始Vue <script src="../js/vue.js"></script> Hello , {{name}}
{{name}}现在已经{{age}}岁了
<script type="text/javascript"> Vue.config.productionTip = false; // 阻止 Vue 在启动时生成生产提示 // 创建 Vue 实例 new Vue({ el: "#root", // el 用于指定当前 Vue 实例为那个容器服务,值通常为 CSS 选择器字符串 data: { name: "steve", age: 18 }, // data 用来存储数据,传入容器中,数据供 el 所指定的容器去使用,值暂时写成一个对象 });</script>
注意:
- 一个 Vue 实例不能解析多个容器,一个容器也不能对应多个 Vue 实例。Vue 实例和容器只能是一一对应的关系
- 模板标签里面必须写成 js 表达式
- js 表达式:一个表达式会生成一个值,可以放在任何一个需要值得地方
- js 代码:控制代码的走向,但是不会生成值
- 一旦 data 中的数据发生改变,那么模板中用到该数据的地方也会自动更新
二、 模板语法
模板语法有两大类:
- 插值语法
- 功能:用于解析标签体内容
- 写法:{{xxx}},xxx 是 js 表达式,且可以直接读取到 data 中的所有属性
- 指令语法
- 功能:用于解析标签(包括:标签属性、标签体内容、绑定事件……)
- 举例:v-bind:href="xxx",或者简写为 :href="xxx",xxx 同样需要写 js 表达式,且可以直接读取到 data 中的所有属性
- 备注:Vue 中的很多指令,且形式都是:v-???,此处只是举一个例子
模板语法 <script src="../js/vue.js"></script><script type="text/javascript"> Vue.config.productionTip = false; new Vue({ el: "#root", data: { name: "steve", url: "https://www.steve1.cn", } })</script>
三、 数据绑定
Vue 中有两种数据绑定的方式:
单向绑定(v-bind):数据只能从 data 流向页面
双向绑定(v-model):数据不仅能从 data 流向页面,还可以从页面流向 data
注意:
- 双向绑定一般都应用在表单类元素上
- v-model:value 可以简写为 v-model ,因为 v-model 默认收集的就是 value 值
数据绑定 <script src="../js/vue.js"></script> 单向数据绑定
双向数据绑定
Hello
<script type="text/javascript"> Vue.config.productionTip = false; new Vue({ el: "#root", data: { name: "steve", } })</script>
扩展:
Vue 挂载容器的另外一种方式:
const v = new Vue({ // el: "#root", data: { name: "steve", } }) v.$mount("#root")
data 使用函数式写法:
const v = new Vue({ /* data: { name: "steve", } */ data:function() { console.log(this) // 此处的 this 是 Vue 实例对象 return { name: "steve", } } // 这里的 :function 是可以删除的,但是注意不能使用箭头函数,否则会出现 this 指针指向错误的问题 data() { return { name: "steve" } } }) v.$mount("#root")
注意,函数式写法中,函数必须要返回一个对象,推荐函数式使用。
由 Vue 管理的函数,一定不要使用箭头函数,否则 this 就不再是指向 Vue 实例对象了。
四、 MVVM 模型
- M(模型 Model):对应 data 中的数据
- V(视图 View):模板
- VM(视图模型 ViewModel):Vue 实例对象
实例:
五、 数据代理
1、 defineProperty
数据代理 <script type="text/javascript"> let addr = "China" let person = { name: "steve", sex: 1, } Object.defineProperty(person, "age", { value: 18, // enumerable: true, // 控制属性是否可以枚举,默认值为false // writable: true, // 控制属性是否可以被修改,默认值为false // configurable: true, // 控制属性是否可以被删除,默认值为false }) // 虽然麻烦,但是比较高级 Object.defineProperty(person, "address", { // 当有人读取address 属性时,该函数会被调用 get() { return addr }, // 当有人修改 person 的 address 属性时,set 函数就会被调用,且会收到修改的具体值 set(value) { console.log(`有人修改了address属性,且值是${value}`) addr = value } }) console.log(Object.keys(person)) console.log(person)</script>
2、 理解数据代理
数据代理:通过一个对象代理,来对另一个对象属性的操作(读、写)
数据代理的理解 <script type="text/javascript"> let obj1 = {x: 100} let obj2 = {y: 200} Object.defineProperty(obj2, "x", { get() { return obj1.x }, set(value) { obj1.x = value } })</script>
3、 Vue中的数据代理
Vue中的数据代理 <script src="../js/vue.js"></script> 学校名称:{{name}}
学校地址:{{address}}
<script type="text/javascript"> Vue.config.productionTip = false; const vm = new Vue({ data: { name: "steve", address: "Anthony" } }) vm.$mount("#root")</script>
六、 事件处理
1、 事件的基本使用
使用方法:
- 使用
v-on:xxx
或者@xxx
绑定事件,其中xxx
是事件名 - 事件的回调需要配置在
methods
对象中,最终会在vm
上 methods
中配置的函数,不要使用箭头函数;否则this
的指向就不是vm
了methods
中配置的函数,都是被Vue
所管理的函数,this
的指向是vm
或组件实例对象@click="demo"
和@click="demo($event)"
,效果一直,但是后者可以传参
事件的基本使用 <script src="../js/vue.js"></script> 欢迎学习{{study_name}}
.prevent是事件修饰符,其会阻止事件默认的行为<script type="text/javascript"> Vue.config.productionTip = false; const data = { "study_name": "Vue核心内容", }; const vm = new Vue({ data, methods: { showInfo(event) { console.log(event) // 参数为鼠标点击的事件信息 console.log(this) // 此处的this是vm,注意不能使用箭头函数 alert("你好呀") }, showInfo1(number, event) { alert(`Hello World ${number}`) console.log(`${number} + ${event}`) } } // methods配置项进行事件回调 }) vm.$mount("#root")</script>
Vue 中的事件修饰符:
prevent
:阻止默认事件(常用)stop
:阻止事件冒泡(常用)once
:事件只触发一次(常用)capture
:使用事件的捕获模式self
:只有event.target
是当前操作的元素时才触发事件passive
:事件的默认行为立即执行,无需等待事件回调执行完毕注意,这个修饰符可以连着使用,如:
@click.stop.prevent=""
2、 键盘事件
键盘事件 <script type="text/javascript" src="../js/vue.js"></script> <script type="text/javascript"> Vue.config.productionTip = false; new Vue({ el: "#root", data: {}, methods: { showInfo(event) { console.log(event.keyCode) }, } }) </script>
Vue 中常用的按键别名:
- 回车 =>
enter
- 删除 =>
delete
(捕获 “删除” 和 “退格” 键) - 退出 =>
esc
- 空格 =>
space
- 换行 =>
tab
- 上 =>
up
- 下 =>
down
- 左 =>
left
- 右 =>
right
Vue 未提供别名的按键,可以使用按键原始的 key 值去绑定,当注意要转为 kebab-case
(短横线命名)
系统修饰键(用法特殊):ctrl、alt、shift、meta
- 配合 keyup 使用:按下修饰键的同时,再按下其他键,随后释放其他键,事件才被触发
- 配合 keydown 使用:正常触发事件
自定义按键别名:Vue.config.keyCodes.自定义按键名 = keyCode
七、 计算属性与监视属性
1、 计算属性的语法
使用 computed
来进行计算属性的配置
监视属性 <script type="text/javascript" src="../js/vue.js"></script> 姓:
名:
姓名为:{{fullName}} <script type="text/javascript"> Vue.config.productionTip = false; new Vue({ el: "#root", data(){ return { "firstName": "张", "lastName": "三", } }, computed: { fullName: { // get 的作用:当有人读取 fullName 时,get 就会被调用,且返回值为 fullName 的值 // get 调用的时间:1. 初次读取这个 fullName (其有缓存的作用) 2. 所依赖的数据发生变化 get() { console.log("getter") return `${this.firstName}-${this.lastName}` }, // 这个 set 不是必须的,如果这个数据只是通过内部修饰的,就可以不需要这个 setter set(value) { // 当 fullName 被修改时调用 console.log("setter") const arr = value.split("-") // 只需要修改其依赖的数据即可 this.firstName = arr[0] this.lastName = arr[1] } } } // 这个为计算属性,直接使用插值语法调用 }) </script>
注意,不能使用箭头函数,否则会出现 this 指向错误的问题。
2、 计算属性的简写
new Vue({ el: "#root", data(){ return { "firstName": "张", "lastName": "三", } }, computed: { fullName() { console.log("getter") return `${this.firstName}-${this.lastName}` } // 直接将 fullName 写成函数形式,只提供 getter ,不提供 setter } })
3、 监视属性
使用 watch
来进行数据的监视
监视属性 <script type="text/javascript" src="../js/vue.js"></script> 今天,天气很{{weatherInfo}}:
<script type="text/javascript"> Vue.config.productionTip = false; new Vue({ el: "#root", data(){ return { "isHot": true, } }, methods: { changeWeather() { this.isHot = !this.isHot } }, watch: { isHot: { immediate: true, // 初始化时,让 handler 调用一下 // handler 在当 isHot 发生改变的时候调用 handler(newVal, oldVal) { console.log(`isHot is changed\nold value is ${oldVal}, new value is ${newVal}`) } } }, // 这个为监视属性,用来监视 isHot 属性的变化 computed: { weatherInfo() { return this.isHot ? "炎热" : "凉爽" } } }) </script>
第二种监听的方式,直接在 vm
上添加监听器:
vm.$watch("isHot", { immediate: true, handler(newVal, oldVal) { console.log(`isHot is changed\nold value is ${oldVal}, new value is ${newVal}`) }})
监视属性 watch
:
- 当监视的属性变化时,回调函数自动调用,进行相关操作
- 监视的属性必须存在,才能进行监视!!
- 监视的两种写法:
new Vue
是传入watch
配置- 通过
vm.$watch("", {})
监视
4、 深度监视
深度监视 <script type="text/javascript" src="../js/vue.js"></script> 数字为:{{numbers.a}}
<script type="text/javascript"> Vue.config.productionTip = false; new Vue({ el: "#root", data(){ return { numbers: { a: 1, b: 1 }, } }, watch: { "numbers.a": { // 监视多级结构中某个属性的变化 handler() { console.log("a被改变了") } }, numbers: { deep: true, // 监视多级结构中所有属性的变化 handler() { console.log("numbers 里面的内容发生改变了") } } }, }) </script>
深度监视:
Vue
中的watch
默认不检测对象内部值的改变(一层)- 配置
deep: true
可以监测对象内部值改变(多层) Vue
自身可以监测对象内部值的改变,但Vue
提供的watch
默认不可以- 使用
watch
时,根据数据的具体结构,决定是否采用深度监视
5、 监视属性简写
监视属性 <script type="text/javascript" src="../js/vue.js"></script> 今天,天气很{{weatherInfo}}:
<script type="text/javascript"> Vue.config.productionTip = false; const vm = new Vue({ el: "#root", data(){ return { "isHot": true, } }, methods: { changeWeather() { this.isHot = !this.isHot } }, watch: { // 正常写法 // isHot: { // // immediate: true, // // deep: true, 深度监视 // handler(newVal, oldVal) { // console.log(`isHot is changed\nold value is ${oldVal}, new value is ${newVal}`) // } // } // 简写形式 // 简写的代价是不能使用配置项,只能写 handler 函数 isHot(newVal, oldVal) { console.log(`isHot is changed\nold value is ${oldVal}, new value is ${newVal}`) } }, computed: { weatherInfo() { return this.isHot ? "炎热" : "凉爽" } } }) vm.$watch("isHot", function(newVal, oldVal) { console.log(`isHot is changed\nold value is ${oldVal}, new value is ${newVal}`) })</script>
computed
和watch
之间的区别:
computed
能完成的功能,watch
都可以完成watch
能完成的功能,computed
不一定能完成,例如:watch
可以进行异步操作两个重要小原则:
- 所被
vm
管理的函数,最好写成普通函数,这样this
的指向才是vm
或组件实例对象- 所有不被
Vue
所管理的函数(定时器的回调函数、ajax
的回调函数等),最好写成箭头函数,这样this
的指向才是vm
或组件实例对象
关键词:
-
从零开始搞一个androidApp,实现h5自动更新、jsbridge
准备window电脑javajdk(包含了javajre)下载安装androidsdk下载安装androidstudio下载安装gradle下载一台带sim卡的android手机
来源: Vue 核心(一)
从零开始搞一个androidApp,实现h5自动更新、jsbridge
快资讯:“星月童话”来了!月掩金星天象明晚亮相:错过要等3年
天天百事通!女生疑在奶茶中喝出10余颗玻璃珠:店家回应
视点!黄金定价模式生变背后:央行们正失去对货币环境的控制
泉水煮蛋怎么做
记录--你还在傻傻的npm run serve吗?快来尝尝这个!
CloudQuery 社区重启 | 愿归来仍是少年
ChatGPT为我们带来了什么?
.net core 关于对swagger的UI(Index.html)或接口的权限验证;
每日头条!oracle学习之路(5)Navicat连接Oracle数据库:Oracle library is not loaded 解决方案
世界快资讯丨美联储鸽派声明缓解日本央行政策压力 日债收益率多数下跌
瑞士央行加息50个基点至1.50% 不排除进一步加息可能
全球短讯!常用消毒剂无效 致命真菌在美国蔓延:近半感染者90天内死亡
《龙马精神》推广曲《真心英雄》MV出炉:成龙郭麒麟重唱经典
环球聚焦:二手路虎变法拉利!男子80万买到泡水路虎 车商被判退一赔三
天天播报:CSAPP-Bomb Lab
全球快资讯丨Python工具箱系列(二十九)
视焦点讯!让业务容器化更安全便捷,阿里云容器镜像服务 ACR 推出免费制品中心
环球热点评!云服务器部署AI绘图记录
全球热资讯!pdf.js 使用
今日要闻!尿道结石怎么治疗才能除病根_尿道结石该怎么治疗
虚幻引擎5推出重磅新功能MetaHuman Animator:实现真人面部动作高速模拟
焦点速看:开放世界元宇宙游戏《仙剑世界》来了:万物皆可交互
焦点短讯!中华老字号!西安饭庄糕点礼盒19.9元冲量大促:一次买16枚
两女子高速上突然跳车:闻到汽油味、以为要爆炸
环球实时:阿里又开源一款数据同步工具 DataX,稳定又高效,好用到爆!
一周的时间搞一个疫苗预约系统
环球热消息:Apache Kafka JNDI注入(CVE-2023-25194)漏洞复现浅析
快讯:河北沧州2022年成人高考成绩查询入口已开通
当前时讯:【新华500】新华500指数(989001)23日低开高走涨0.88%
今日观点!女生10年收集万瓶香水价值一套房:圈粉超47万
世界热文:捐100亿元建世界一流名校 曹德旺:大学没有教会年轻人动手能力
【天天快播报】汽车疯狂降价潮引担忧:狂欢之后会不会是淘汰潮?
热推荐:【操作系统】面试题总结(持更)
天天简讯:权值(点分治)
当前速看:JavaScript学习笔记
环球最资讯丨WMS深入浅出
环球关注:剑指 Offer 17. 打印从 1 到最大的 n 位数(java解题)
环球观焦点:Intel 56核心刚出生就落伍!AMD Zen4撕裂者下半年来袭:96核心
【新视野】力压美国印度!中国富豪全球第一:钟睒睒蝉联首富 马化腾张一鸣紧随其后
石榴汁弄衣服上怎么洗才能不会变干(石榴汁弄衣服上怎么洗)
环球最资讯丨机箱中的海景房 乔思伯TK-1双曲面侧透游戏机箱579元:颜值爆表
成都比亚迪、特斯拉、宝马三车相撞 特斯拉和宝马车轮飞了
天天简讯:Go语言:利用 TDD 逐步为一个字典应用创建完整的 CRUD API
【世界播资讯】springcloud Stream整合rabbitmq消息驱动生产者踩坑
【天天报资讯】Vue之移动端viewport-vw适配
LevelDb-用户接口
世界视讯!Spring Cloud Alibaba微服务搭建(二)- 安装mysql
【世界速看料】新能源汽车充电时为何要交停车费 专家:可防止充电之后不挪窝
当前热点-全球首枚3D打印火箭!美国“人族一号”发射失败
明年底有望普及!PCIe 5.0 SSD尴尬了 买的人太少:性能残血、价格死贵
我和你本应该各自好各自坏是什么歌?我和你本应该各自好各自坏歌词
mirror男团中谁的人气最高?mirror男团年龄排序
亡羊补牢的亡是什么意思?亡羊补牢成语故事
班主任管理班级的策略与措施是什么?班主任教育随笔示范
《最终幻想16》新片段 宠物可以防止你迷路
看点:MS SQL服务器教程_编程入门自学教程_菜鸟教程-免费教程分享
卿卿日常李薇的真实身份是什么?卿卿日常郝葭死了吗?
质感旗舰!真我GT Neo5 SE未来感十足:纳米级光哑熔合工艺打造
女子不敢在隧道开车 交给无证男子驾驶 听到后果惊恐万分
196元暴涨至1910元 民宿回应五一价格翻十倍:先挂着 随时调整
最资讯丨专盯未成年?女孩添加“爱豆”QQ后被骗贷款3万4
连鸽两次 世界首枚3D打印火箭将再发射:这回能顺利吗?
全球热点!Python工具箱系列(二十八)
天天通讯!不知道
酝酿产智融合“化学反应” 浙江衢州集中签约多家研究院
天天日报丨“帝王座驾、以辇为尊” 比亚迪云辇系统官宣:或为底盘新技术
天天热文:早午餐合成一顿?医生提醒:细胞营养需求加大 更易长胖
即时看!警惕!义乌一女子险被电商“客服”骗走800万
当前观点:配可滑动中控屏、宾利同款B柱挂钩!极氪X内饰官图发布
每日看点!【数论与组合数学 3】Hensel 引理、原根
世界观察:Android使用SurfaceView实现签名板
每日聚焦:机器学习算法(三):基于horse-colic数据的KNN近邻(k-nearest neighbors)预测分类
全球微头条丨领域驱动设计DDD应用与最佳实践
环球观天下!Linux安装Redis教程
看热讯:小孩飞机票怎么收费
1000N连续旋转爆震 国内全新发动机点火成功:颠覆性优势
自爆卡车?奔驰EQE车库逆行:反怪特斯拉Model 3车主不让路
精选!男子在电竞酒店枕头下发现一窝老鼠 官方回应引网友吐槽:怎么能住
微头条丨8只海豚在美国海滩搁浅全部死亡 6只被安乐死
焦点速递!吉利全新SUV博越COOL官图发布:四出排气、1.5升发动机
要去海南旅游的老友们请注意,海南离岛免税购物,有新变化!
今日热闻!数据库系统原理之关系数据库
深入消息队列MQ,看这篇就够了!
全网最详细中英文ChatGPT-GPT-4示例文档-从0到1快速入门条目分类应用——官网推荐的48种最佳应用场景(附python/node.js/curl命令源
环球动态:以太网发明者鲍勃·梅特卡夫获图灵奖 计算机界的诺贝尔奖
又一股惨遭退市!市值暴跌99%
世界热议:《CS2》地图对比:起源2加持画质更明亮、细节丰富
去年净赚499亿元创纪录!保时捷2.7万名员工每人6.7万元奖金
Java八股文之基础篇
全球简讯:在 Arch Linux 中安装 GNOME 桌面所需步骤介绍
当你对 redis 说你中意的女孩是 Mia
环球时讯:琥珀手串会变色吗 琥珀手串会越戴越亮吗
环球看点!全球首个空中飞行出租车来了:巴黎开测 2024奥运会要用
【天天报资讯】抗早泄国产“伟哥”药物上市 市场有多大?专家称将翻倍增长 国内患者众多
全球首搭帝瓦雷音响!比亚迪腾势N7猎跑SUV亮相:运动低趴
当前速讯:鸡鸣寺游客爆满设反悔门引导离寺 网友神评:我佛果然慈悲 给反悔机会
全球今日报丨读C#代码整洁之道笔记04_重构C#代码识别代码坏味道
北方多地遭遇沙尘暴 PM爆表:气象台再发预警 还没退去