vue2高级特性

1、vue父子组件如何通信

  1. 通过props和emit事件传递
// 父组件中<Child :data="data" @dataChange="dataChangeHandle"></Child>...methods: {dataChangeHandle(data) {...do somthing}
}
// 子组件中export default {props: {data: {type: Object,default: () => {}}},methods: {events() {this.$emit("dataChange", data)}}
}
  1. 自定义事件
首先定义事件,只需要new一个vue实例即可
// event.js
const event = new Vue();export default event;//在事件定义处event.$emit("eventName", params);// 在事件接受处event.$on("eventName", this.eventHandle) // 为什么要使用function?

注意, 自定义事件必须要在组件销毁前解绑

  1. vuex
    这条我想不必多赘述了

  2. provide/inject

2、vue组件生命周期调用顺序

初始化(created)是从外到内的(即父组件到子组件),而渲染(mounted)是从内到外的。

同理,update和destroy也是一样的。

3、v-model的实现原理

Vue.component('base-checkbox', {model: {prop: 'checked',event: 'change'},props: {checked: Boolean},template: `<inputtype="checkbox"v-bind:checked="checked"v-on:change="$emit('change', $event.target.checked)">`
})

现在在这个组件上使用 v-model 的时候:

<base-checkbox v-model="lovingVue"></base-checkbox>

这里的 lovingVue 的值将会传入这个名为 checkedprop。同时当 触发一个 change 事件并附带一个新的值的时候,这个 lovingVue 的 property 将会被更新。

注意你仍然需要在组件的 props 选项里声明 checked 这个 prop。

4、$nextTick

什么是$nextTick?先如下代码会输出什么:

var vm = new Vue({el: '#example',data: {message: '123'}
})
vm.message = 'new message' // 更改数据
vm.$el.textContent === 'new message' // false

Vue 在更新 DOM 时是异步执行的。
只要侦听到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据变更。如果同一个 watcher 被多次触发,只会被推入到队列中一次。这种在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作是非常重要的。然后,在下一个的事件循环“tick”中,Vue 刷新队列并执行实际 (已去重的) 工作。
为了在数据变化之后等待 Vue 完成更新 DOM,可以在数据变化之后立即使用 Vue.nextTick(callback)。这样回调函数将在 DOM 更新完成后被调用。
nextTick是更新完成的回调函数。
vue是异步渲染,$nextTick待DOM渲染完成再回调
页面渲染会将data的修改做整合,多次data修改只会渲染一次

5、slot

插槽包括普通插槽、具名插槽、作用域插槽

<navigation-link url="/profile">Your Profile
</navigation-link>

然后你在 的模板中可能会写为:

<av-bind:href="url"class="nav-link"
><slot></slot>
</a>

当组件渲染的时候, 将会被替换为“Your Profile”。插槽内可以包含任何模板代码,包括 HTML

具名插槽:

<div class="container"><header><slot name="header"></slot></header><main><slot></slot></main><footer><slot name="footer"></slot></footer>
</div>

使用:

<base-layout><template v-slot:header><h1>Here might be a page title</h1></template><p>A paragraph for the main content.</p><p>And another one.</p><template v-slot:footer><p>Here's some contact info</p></template>
</base-layout>

作用域插槽

<span><slot v-bind:user="user">{{ user.lastName }}</slot>
</span>

使用:

<current-user><template v-slot:default="slotProps">{{ slotProps.user.firstName }}</template>
</current-user>

6、动态、异步组件

什么是动态组件?有如下场景,需要渲染一个新闻页面,包括图片、文字等内容时,怎么渲染?当不确定渲染的是什么组件时,就需要用到动态组件了。

<template><div v-for="item in list" :key="item.type"><component :is="item.type"></component></div>
</template><script>
import component1 from './component1.vue'
import component2 from './component2.vue'export default {name: "AsyncComponent",components: {component1,component2},data() {return {list: [{name: '组件1',type: 'component1',},{name: '组件2',type: 'component2',}]}},
}
</script><style scoped></style>

如何使用异步组件?很简单,只需使用import函数即可,如:

components: {component1: () => import('./component1.vue'),component2: () => import('./component2.vue')},

7、keep-alive

<template><div><h1>keep-alive</h1><button @click="changeState('A')">A</button><button @click="changeState('B')">B</button><button @click="changeState('C')">C</button><KeepAlive><component :is="state"></component></KeepAlive></div>
</template><script>
import A from "./A.vue";
import B from "./B.vue";
import C from "./C.vue";export default {name: "KeepAlive",components: {A,B,C,},data() {return {state: "A",};},methods: {changeState(state) {this.state = state;},},
};
</script>

8、mixin

作用:抽离公共逻辑
定义mixin文件内容,写法与vue文件中script写法相同

var mixin = {created: function () { console.log(1) }
}
var vm = new Vue({created: function () { console.log(2) },mixins: [mixin]
})
// => 1
// => 2

mixin的缺点:

  • 变量来源不明确,容易造成困惑
  • 多minxin可能造成命名冲突
  • 可能会出现多对多的关系,复杂度提升问题

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

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

相关文章

C++ STL partition_copy 用法和实现

一&#xff1a;功能 对区间内的元素进行分组&#xff0c;将分组结果拷贝到给定序列中。 二&#xff1a;用法 #include <vector> #include <algorithm> #include <iostream>int main() {std::vector<int> data{2, 4, 6, 1, 3, 5};auto is_even [](in…

Python list comprehension (列表推导式 - 列表解析式 - 列表生成式)

Python list comprehension {列表推导式 - 列表解析式 - 列表生成式} 1. Python list comprehension (列表推导式 - 列表解析式 - 列表生成式)2. Example3. ExampleReferences Python 中的列表解析式并不是用来解决全新的问题&#xff0c;只是为解决已有问题提供新的语法。 列…

iPad型号数据解析:了解不同iPad型号的连接和扩展性能力

iPad是一款非常受欢迎的平板电脑&#xff0c;拥有多种型号和规格可供选择。在本篇文章中&#xff0c;我们将深入研究不同iPad型号的连接和扩展性能。数据源来自于挖数据平台&#xff0c;该平台提供了全面的iPad型号数据&#xff0c;共计1485个型号。 首先&#xff0c;让我们来…

【D3.js in Action 3 精译_020】2.6 用 D3 设置与修改元素样式 + 名人专访(Nadieh Bremer)+ 2.7 本章小结

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可视化最佳实践&#xff08;下&#xff09;1.4 本章小结 第二章…

SpringBoot如何使用Kafka来优化接口请求的并发

在Spring Boot中使用 Kafka 来优化接口请求的并发&#xff0c;主要是通过将耗时的任务异步化到Kafka消息队列中来实现。这样&#xff0c;接口可以立即响应客户端&#xff0c;而不需要等待耗时任务完成。 在Spring Boot应用程序中调用Kafka通常涉及使用Spring Kafka库&#xff…

怎样用Java程序与数据库建立联系?

首先我们要了解一下JDBC&#xff0c;一个为Java程序与关系型数据库交互提供便利的API&#xff08;应用程序编程接口&#xff09;&#xff0c; 本期我们尝试用Java编程软件IDEA与MYSQL数据库建立联系。 首先我们在IDEA中穿件一个&#xff08;SQL&#xff09;&#xff0c;然后导…

系统编程--Linux下文件其他操作

这里写目录标题 文件存储理论补充dentry、inode 文件其他操作stat函数作用函数原型代码&#xff08;以获取文件大小为例&#xff09;补充&#xff08;获取文件类型&#xff09; lstat函数作用函数原型代码补充&#xff08;获取文件权限&#xff09;总结 tipslink函数作用简介函…

畅玩游戏新选择 :游戏本 Windows10 64位 专业版!

对于喜欢游戏竞技的玩家而言&#xff0c;选择一款合适的操作系统对于提升游戏体验至关重要。为了满足这一需求&#xff0c;系统之家小编将带来高性能的游戏本专用Win10操作系统。这一版本系统不仅注重游戏的稳定性&#xff0c;还针对玩家在游戏中可能遇到的超时检测和恢复&…

收银系统源码-千呼新零售收银视频介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

JavaScript 模板字符串:让字符串拼接变得更优雅

在 JavaScript 开发中&#xff0c;字符串拼接是一个常见的需求。从简单的用户界面文本生成到复杂的动态数据格式化&#xff0c;字符串操作无处不在。传统的字符串拼接方法虽然功能强大&#xff0c;但往往显得冗长且难以阅读。为了解决这一问题&#xff0c;ES6&#xff08;ECMAS…

240718_使用Labelme制作自己的图像分割数据集

240718_使用Labelme制作自己的图像分割数据集 从目标检测入门的朋友们可能更熟悉的是LabelImg&#xff0c;这里要注意做好区分&#xff0c;LabelImg和Labelme不是一个东西&#xff0c;如下经典图&#xff1a; &#xff08;a&#xff09;图像分类&#xff08;目标检测&#xff…

跨平台webSocket模块设计技术解决方案

1. 概述 目标&#xff1a;设计并实现一个能够在多种操作系统上运行的WebSocket通讯模块&#xff0c;支持与前端浏览器和HTTPS服务端进行数据交换。技术栈&#xff1a;C11 &#xff0c;使用跨平台库如 Boost处理网络IO&#xff0c;使用 JSON 库如 nlohmann/json 解析消息。 2.…

Mysql深入讲解(索引、事务、锁机制)

一、MySQL索引 1、何为索引&#xff1f; MySQL中的索引是一种数据结构&#xff0c;用于加快对数据库表中数据的查询速度【查询速度提升】。它类似于书本目录&#xff0c;使得用户可以根据特定字段快速定位到所需的数据行&#xff0c;而无需扫描整个表。 2、索引分类 Hash索…

数据科学、数据分析、人工智能必备知识汇总-----主目录-----持续更新

本文相当于目录方便快速检索内容&#xff0c;没有实际内容&#xff0c;只做索引 新能源行业知识体系-------主目录-----持续更新https://blog.csdn.net/grd_java/article/details/140004020 目录 一、Excel二、常用数据分析思维方法三、Python基础和MySql四、Python爬虫 一、E…

怎样对 PostgreSQL 中的慢查询进行分析和优化?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 怎样对 PostgreSQL 中的慢查询进行分析和优化&#xff1f;一、理解慢查询的危害二、找出慢查询&#x…

Linux可视化工具-netdata之docker安装

版本要求 docker cli安装 docker pull netdata/netdata docker run -d --namenetdata \ --pidhost \ --networkhost \ -v netdataconfig:/etc/netdata \ -v netdatalib:/var/lib/netdata \ -v netdatacache:/var/cache/netdata \ -v /:/host/root:ro,rslave \ -v /etc/passwd…

[集成学习]基于python的Stacking分类模型的客户购买意愿分类预测

1 导入必要的库 import pandas as pd import numpy as np import missingno as msno import matplotlib.pyplot as plt from matplotlib import rcParams import seaborn as sns from sklearn.metrics import roc_curve, auc from sklearn.linear_model import LogisticRegres…

业务架构、数据架构、应用架构和技术架构分析

一文看懂&#xff1a;什么是业务架构、数据架构、应用架构和技术架构 TOGAF&#xff08;开放集团架构框架&#xff09;是企业广泛应用的架构设计和管理利器。其核心在于四大架构领域&#xff1a;业务、数据、应用和技术&#xff0c;助力组织高效运作。TOGAF&#xff0c;让架构设…

【深度学习入门篇 ⑩】Seq2Seq模型:语言翻译

【&#x1f34a;易编橙&#xff1a;一个帮助编程小伙伴少走弯路的终身成长社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; ) &#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

【Sklearn-混淆矩阵】一文搞懂分类模型的基础评估指标:混淆矩阵ConfusionMatrixDisplay

【Sklearn-混淆矩阵】一文搞懂分类模型的基础评估指标&#xff1a;混淆矩阵ConfusionMatrixDisplay 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &…