文章目录

  • Vue 进阶语法和生命周期
    • 16、Vue:生命周期【了解】
    • 17、Vue:computed计算属性
    • 18、Vue:watch监控属性

Vue 进阶语法和生命周期

a. 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 根Root实例 开始的:

// 创建Vue实例
var vue = new Vue({// 选项对象
});


b. 当创建一个 Vue 实例时,你可以传入一个选项对象, 选项对象包括(例举):

  • DOM (视图):

    • el: 渲染的html元素
    • template: 渲染的模板(组件开发时用)
    • render: 渲染函数(组件开发时用)
  • 数据/方法
    • data: 数据
    • props: 组件属性((组件开发时用))
    • methods: 方法
    • computed: 计算属性
    • watch: 监控属性
  • 生命周期钩子(不同阶段自动回调的函数)
    • beforeCreate
    • created
    • beforeMount
    • mounted
    • beforeUpdate
    • updated
    • beforeDestory
    • destoryed

c. Vue实例常用的方法:

  • vm.$mount() 挂载方法 (常用于组件开发)

    如果 Vue 实例在实例化时没有指定 el 选项,则它处于“未挂载”状态,没有关联的 DOM 元素。

    可以使用 vm.$mount() 手动地挂载一个未挂载的实例。

  • vm.$emit() 定义触发当前实例上的事件 (常用于组件开发)

    触发当前实例上的事件。附加参数都会传给监听器回调。

参考官方api: https://cn.vuejs.org/v2/api/

16、Vue:生命周期【了解】

目标: 了解vuejs的生命周期

每个 Vue 实例在被创建时都要经过一系列的初始化过程: 创建实例,装载模板,渲染模板等。Vue为生命周期中的每个状态都设置了钩子函数(监听函数)。每当Vue实例处于不同的生命周期时,对应的函数就会被触发调用。

生命周期钩子函数:

  • beforeCreate:实例初始化之后调用(要啥啥没有,data和methods都拿不到

  • created:实例创建完成后调用(data和methods都拿到了

  • beforeMount:挂载开始之前调用**(拿到了html元素作为模板,但是还没有做数据挂载)**

  • mounted:挂载完毕之后调用

  • beforeUpdate:数据更新之前调用

  • updated:数据更新之后调用

  • beforeDestory:实例销毁之前调用。在这一步,实例仍然完全可用。

  • destoryed:实例销毁之后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

生命周期图示:

vm.$el: Vue 实例使用的根 DOM 元素。

Vue在实例化的过程中,会调用这些生命周期的方法,给我们提供了执行自定义逻辑的机会。那么,在这些vue钩子中,vue实例到底执行了那些操作,我们先看下面执行的例子:

demo_13.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Vuejs生命周期钩子</title><script src="node_modules/vue/dist/vue.js"></script>
</head>
<body><div id="app">{{message}}</div><script type="text/javascript">var vm = new Vue({el : '#app',data : {message : 'VueJS 您好!'},beforeCreate : function() {showData('1.实例初始化之后', this);},created : function() { // 比较重要(发异步请求加载初始化数据)showData('2.实例创建完成后', this);},beforeMount : function() {showData('3.挂载到dom前', this);},mounted : function() {showData('4.挂载到dom后', this);},beforeUpdate : function() {showData('5.数据变化更新前', this);},updated : function() {showData('6.数据变化更新后', this);},beforeDestroy : function() {vm.test = "3333";showData('7.vue实例销毁前', this);},destroyed : function() {showData('8.vue实例销毁后', this);}});function showData(process, obj) {console.log(process);console.log('data 数据:' + obj.message)console.log('挂载的对象:')console.log(obj.$el)console.log('真实dom结构:' + document.getElementById('app').innerHTML);console.log('-------------------------------')}vm.message = "good...";vm.$destroy();</script>
</body>
</html>

小结

  • 页面初始化数据,可以在哪些钩子函数中提前加载?

    • created、beforeMount、mounted 三个钩子函数(发送异步请求,获取后台数据)

17、Vue:computed计算属性

目标: 掌握compued计算属性的使用

在插值表达式中使用js做运算非常方便。但是如果表达式的内容很长,就会显得不够优雅,而且后期维护起来也不方便,这个时候就可以用计算属性。

使用语法:

computed: {key1: function(){return "计算后的数据";},key2: function(){return "计算后的数据";}
}

demo_14.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Vuejs计算属性</title><script src="node_modules/vue/dist/vue.js"></script>
</head>
<body><div id="app"><!-- 插值表达式 --><h2>{{new Date(milliseconds).getFullYear() + "年"+ new Date(milliseconds).getMonth()+ "月" + new Date(milliseconds).getDate()}}</h2><!-- 计算属性 (注意:它不是一个函数) --><h2>{{time}}</h2></div><script type="text/javascript">var vue = new Vue({el : '#app', // 渲染的html元素data : { // 数据对象milliseconds : 1573878276849,},computed : { // 计算属性time (){ // time属性const date = new Date(this.milliseconds);return date.getFullYear() + "年" + date.getMonth() + "月" + date.getDate();}}});</script>
</body>
</html>

注意:

  • 计算属性本质是函数,但是一定要返回数据。页面渲染时,只能把这个函数当成一个属性来使用。
  • 计算属性需要我们自己主动调用,生命周期钩子函数不会主动调用计算属性。

18、Vue:watch监控属性

目标: 掌握watch监控属性的使用

watch可以帮我们监控数据对象中的属性值发生改变。

使有语法:

watch : {key1 : function(newVal, oldVal){},"obj.key1" : function(newVal, oldVal){},obj : {// 开启深度监控(对象)deep : true,// 监控函数,必须用这个函数名handler : function(obj){}}
}

demo_15.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Vuejs监控属性</title><script src="node_modules/vue/dist/vue.js"></script>
</head>
<body><div id="app"><input type="text" v-model="message"/><br/><h2>{{message}}</h2><input type="text" v-model="user.name"/><br/><input type="text" v-model="user.age"/><br/><h2>姓名: {{user.name}} ==> 年龄: {{user.age}}</h2></div><script type="text/javascript">var vue = new Vue({el : '#app', // 渲染的html元素data : { // 数据对象message : '',user : {name : '', age : ''}},watch : { // 监控属性message : function(newVal, oldVal){console.log("新值:" + newVal + ",旧值:" + oldVal);},"user.name" : function(newVal, oldVal){console.log("user.name:" + newVal + ",user.name:" + oldVal);},user : {// 开启深度监控,可以监控到对象属性值的变化deep : true,// 监控处理函数handler : function (obj) {console.log("name:" + obj.name + ",age:" + obj.age);}}}});</script>
</body>
</html>
  • 监控message变化:
  • 监控user对象变化:

Memorial Day is 509 days
I miss you
xiaokeai

Vue 进阶语法和生命周期相关推荐

  1. Vue 进阶系列丨生命周期

    Vue 进阶系列教程将在本号持续发布,一起查漏补缺学个痛快!若您有遇到其它相关问题,非常欢迎在评论中留言讨论,达到帮助更多人的目的.若感本文对您有所帮助请点个赞吧! 2013年7月28日,尤雨溪第一次 ...

  2. day4 vue 学习笔记 组件 生命周期 数据共享 数组常用方法

    系列文章目录 day1学习vue2笔记 vue指令 day2 学习vue2 笔记 过滤器 侦听器 计算属性 axios day3 vue2 学习笔记 vue组件 day4 vue 学习笔记 组件 生命 ...

  3. Vue之MVVM、Vue实例对象、生命周期

    1.初识Vue Vue是一套用于构建用户界面的渐进式框架,Vue 被设计为可以自底向上逐层应用,Vue的核心是只关注视图层(如何理解),不仅易于上手,还便于与第三方库或既有项目整合. 渐进式框架:渐进 ...

  4. vue手机端回退_从外链回退到vue应用不触发生命周期、beforeRouterEnter等钩子函数的问题...

    在iphoneX及以上版本从外链回退不触发事件,7P,7没发现这个bug 安卓上自测没有发现这个问题 最近做项目中发现了一个问题,iphoneX及以上版本从当前vue应用中跳转到外部链接然后在回退到v ...

  5. Vue基础进阶 之 实例方法--生命周期

    在上一篇博客中我们知道生命周期的方法: 生命周期: vm.$mount:手动挂载Vue实例: vm.$destroy:销毁Vue实例,清理数据绑定,移除事件监听: vm.$nextTick:将方法中的 ...

  6. 【Vue.js学习】生命周期及数据绑定

    一.生命后期 官网的图片说明: Vue的生命周期总结 var app = new Vue({el:"#app", beforeCreate: function(){console. ...

  7. Gavin小黑屋——Vue 学习笔记 :生命周期特点(先渲染HTML标签再渲染数据)

    Vue基础   生命周期特点(先渲染HTML标签再渲染数据) 目录 Vue基础   生命周期特点(先渲染HTML标签再渲染数据) 一.Vue生命周期 Vue 的生命周期总共分为8个阶段:创建前/后,载 ...

  8. Vue(十)生命周期

    Vue生命周期 vue实例从创建到销毁的过程,称为生命周期,共有八个阶段 <script> window.οnlοad=function(){let vm = new Vue({el:'# ...

  9. vue函数如何调用其他函数?_从源码中学Vue(一)生命周期中的钩子函数的那点事儿...

    欢迎来到我的<从源码中学Vue>专题系列文章,更多精彩内容持续更新中,欢迎关注 :) Vue作为当下前端最流行的框架之一,在国内占绝对的优势.所以接下来我们一起来学习它吧! 我不会像其它人 ...

最新文章

  1. JAVA序列化和反序列化
  2. 检查图形是否为真彩色图形
  3. 华为服务器如何登录修改密码,如何修改云服务器的登录密码
  4. 51nod1325-两棵树的问题【最大权闭合图,网络流】
  5. Java 9:对可选的增强
  6. SSM:Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束的解决
  7. 建立带头结点的双向链表_尾插法
  8. mysql5.7安装教程centos_MySQL5.7版CentOS系统简易安装教程
  9. 欢迎加入免费星球,一起交流大数据技术。
  10. python设计模式18-备忘录模式
  11. 服务器常见远程管理网口及登录方式
  12. 程序员面试宝典问题及解析
  13. Java程序设计基础(第五版)期末总复习
  14. 程序员必备智力题集锦 (典藏版)
  15. swagger-ui快速入门教程
  16. [GIS教程] 5.3 空间数据组织
  17. 永不消逝的电波(二)HackRF入门:家用无线门铃信号重放
  18. 如何在Excel 2013中使用公式编辑器
  19. 如何修改网页视频播放倍速?(最高16倍速)
  20. linux下执行php命令echo不输出,linux echo命令以及linux echo命令提示权限不够的方法...

热门文章

  1. word整体放大、缩小字体
  2. 60行Python代码,打造自己的录屏软件!
  3. 三个世界的交叉点2:广告业的“酒之变”
  4. 如何实现在div上做出凸出效果。。。的导航栏。
  5. Mac下代码统计工具
  6. 用 TypeScript 写 React Redux - 完全指南
  7. 【函数】 collections.Counter()
  8. 超实用的CAD技巧:一分钟教你如何将CAD转换成高清JPG图片
  9. 西门子医疗2019第四季度表现强劲,营收增长至约41亿欧元
  10. 硬盘和计算机的接口类型有哪两种,常见的不同类型接口的固态硬盘有哪些