父子通信,动态组件,异步加载组件

2.组件基础

2-1父传子props

父传子:水往低处流(单向绑定的原则),子不能修改父传过来的属性,它是只读的,但是可以使用监听和计算属性进行修改

父组件

<template><div><navbar mytitle="电影" isShow="false"></navbar><navbar mytitle="影院"></navbar>//动态绑定状态<navbar :mytitle="parentTitle"></navbar></div>
</template>
<script>
import Navbar from './Navbar.vue'
export default {data() {return {//状态parentTitle: "父组件定义的一个状态",}},components: {Navbar}
}
</script>

子组件

<template><div>//显示内容<p>{{ mytitle }}</p><button @click="handler()" v-if="isShow">按钮</button></div>
</template>
<script>
export default {// props: ["mytitle","left","right"],//通过props接受父组件传过来的内容props:{mytitle: String,isShow:{type:Boolean,default:true,// required:true}},methods: {handler() {// 无法直接访问状态和修改状态console.log(this.parentTitle)}},}
</script>
2-2属性验证&默认属性
export default {props: {// 基础类型检查//(给出 `null` 和 `undefined` 值则会跳过任何类型检查)propA: Number,// 多种可能的类型propB: [String, Number],// 必传,且为 String 类型propC: {type: String,required: true},// Number 类型的默认值propD: {type: Number,default: 100},// 对象类型的默认值propE: {type: Object,// 对象或者数组应当用工厂函数返回。// 工厂函数会收到组件所接收的原始 props// 作为参数default(rawProps) {return { message: 'hello' }}},// 自定义类型校验函数propF: {validator(value) {// The value must match one of these stringsreturn ['success', 'warning', 'danger'].includes(value)}}}
}
2-3子传父:$emit

如果 在vue中要用sass,需要安装这个模块,npm i sass

在子页面通过$emit进行传值,在父页面通过event事件进行获取值

子组件

<template><div>//,在父页面通过event事件进行获取值,//不要写小括号,会有一个event事件<Child @event="handleEvent"></Child> </div>
</template>
<script>import Child from './Child.vue'export default {data() {return {isShow: true}},components: {Child},methods: {//,在父页面通过event事件进行获取值handleEvent(event) {console.log("父组件",event);}},
}</script>

子组件

<template><div><button @click="send()">子传父</button></div>
</template>
<script>
export default {data() {return {childTitle:"子组件的状态"}},methods: {send() {进行传值给父组件   event必须和父页面的一致             this.$emit("event",this.childTitle)}},}
</script>
2-4$refs-父组件的强权
  • ref如果绑定在dom节点上,拿到的就是 原生dom节点
  • ref如果绑定在组件上,拿到的就是 组件对象,可以实现通信功能

父组件

<template><div>$ref<filed label="用户名" type="text" ref="username"></filed><filed label="密码" type="password" ref="password"></filed><button @click="login">登录</button><button @click="rest" >重置</button></div>
</template>
<script>
import filed from './filed-父子通信.vue'
export default {components: {filed},methods: {login() {//通过$refs获取子组件的值console.log(this.$refs.username.value,this.$refs.password.value);},rest() {this.$refs.username.value="",this.$refs.password.value=""}},
}
</script>

子组件

<template><div><label for="">{{  label}}</label><input  :type="type" v-model="value"></div>
</template>
<script>
export default {props: ["label", "type"],data() {return {value:""}},}
</script>
2-5 KaTeX parse error: Expected 'EOF', got '&' at position 7: parent&̲root - 子组件的无法无天
<template><div>parent<Child></Child><div v-show="isShow">sidebar</div></div>
</template>
<script>
import Child from './Child.vue'
export default {components: {Child},data() {return {parentTitle: "父组件11111",isShow: true}},
}
</script>

子组件

<template><div>Child<button @click="handleClick">$parent</button></div>
</template>
<script>
export default {methods: {handleClick() {//----------------子组件无法无天-----------------//在子组件中通过`$parent`访问父组件,通过`$root`访问根组件console.log(this.$parent.parentTitle,this.$root);this.$parent.isShow=!this.$parent.isShow;}},
}
</script>
2-6.跨级通信provide和inject

provideinject 是 Vue.js 中用于跨组件通信的一对高级特性。它们允许祖先组件(提供者)向所有后代组件(使用者)传递数据,而不需要通过 props 或事件的方式。

provide ,inject 搭配组合式api使用,具备响应性

provide ,inject 搭配选项式使用, 没有响应性, 把app组件实例

父组件

<!-- provide ,inject 搭配组合式api使用,具备响应性
provide ,inject 搭配选项式使用, 没有响应性, 把app组件实例-->
<template><div><navbar></navbar><tabber></tabber></div>
</template>
<script>
import navbar from './Navbar.vue'
import tabber from './Tabber.vue'
export default {components: {navbar,tabber},// 是一个函数provide() {return {app:this}},data() {return {title:"首页"}},
}
</script>

navbar

<template><div style="text-align: center;">{{ app.title}}</div>
</template>
<script>
export default {inject: ['app'],}
</script>

tabber

<template><ul><li v-for="(item, index) in list" :key="index" @click="handlerClick(item.name)">{{ item.name }}</li></ul>
</template>
<script>
export default {inject:["app"],data() {return {list: [{ name: "首页" },{ name: "分类" },{ name: "购物车" },{ name: "我的" }]}},methods: {handlerClick(val) {this.app.title=val}},
}
</script>
<style scoped>ul{list-style: none;display: flex;position: fixed;bottom: 0;width: 100%;}
li{flex: 1;text-align: center;height: 60px;line-height: 60px;}
</style>
2-7动态组件 - 墙头草

在切换时创建新的组件实例通常是有意义的,但在这个例子中,我们的确想要组件能在被“切走”的时候保留它们的状态。要解决这个问题,我们可以用 `` 内置组件将这些动态组件包装起来:

  <!-- 动态组件方式它允许你根据当前组件的状态或其他条件,动态地选择渲染不同的组件include="Home":这句话的意思,就是Home这个页面,在里面定义了一个名字为Home的,改页面的将会有缓存,没有加的则没有
include,可以包含多个--><keep-alive include="List"><component :is="obj[title]"></component></keep-alive>
<!-- 以英文逗号分隔的字符串 -->
<KeepAlive include="a,b"><component :is="view" />
</KeepAlive><!-- 正则表达式 (需使用 `v-bind`) -->
<KeepAlive :include="/a|b/"><component :is="view" />
</KeepAlive><!-- 数组 (需使用 `v-bind`) -->
<KeepAlive :include="['a', 'b']"><component :is="view" />
</KeepAlive>
2-8异步组件(按需加载)

在大型项目中,我们可能需要拆分应用为更小的块,并仅在需要时再从服务器加载相关组件。Vue 提供了 defineAsyncComponent 方法来实现此功能:

//----------------异步组件(按需加载)提高性能-----------------
import { defineAsyncComponent } from 'vue'components: {navbar,tabber,Center,// 这样定义以后,这两个页面,在一开始不会加载,直到使用了之后才会有缓存// **加载与错误提示**Home: defineAsyncComponent( () => import('./components/Home.vue')),List: defineAsyncComponent({//   // 加载组件loader: () => import('./components/List.vue'),// 加载异步组件时使用的组件loadingComponent: LoadingComponent,// 展示加载组件前的延迟时间,默认为 200msdelay: 0,// 加载失败后展示的组件errorComponent: ErrorComponent,// 如果提供了一个 timeout 时间限制,并超时了// 也会显示这里配置的报错组件,默认值是:Infinitytimeout: 3000}),},

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

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

相关文章

wpf devexpress 创建布局

模板解决方案 例子是一个演示连接数据库连接程序。打开RegistrationForm.BaseProject项目和如下步骤 RegistrationForm.Lesson1 项目包含结果 审查Form设计 使用LayoutControl套件创建混合控件和布局 LayoutControl套件包含三个主控件&#xff1a; LayoutControl - 根布局…

C复习-输入输出函数+流

参考&#xff1a; 里科《C和指针》 perror 定义在stdio.h中。当一个库函数失败时&#xff0c;库函数会在一个外部整型变量errno&#xff08;在errno.h中定义&#xff09;中保存错误代码&#xff0c;然后传递给用户程序&#xff0c;此时使用perror&#xff0c;会在打印msg后再打…

.gitignore 文件——如何在 Git 中忽略文件和文件夹详细教程

文章目录 什么是 .gitignore 文件&#xff1f;.gitignore 文件是用来做什么的&#xff1f;如何创建一个 .gitignore 文件&#xff1f;在 .gitignore 文件中应包括什么&#xff1f;如何在 Git 中忽略一个文件和文件夹如何忽略以前提交的文件 什么是 .gitignore 文件&#xff1f;…

Django框架之模型层(一)

【一】前言 Django自带的sqlite3数据对日期格式不敏感&#xff0c;处理的时候容易出错 【二】单表操作 【1】数据的增加 from django.test import TestCase# Create your tests here. import osif __name__ "__main__":os.environ.setdefault("DJANGO_SETTIN…

【Go入门】 Go搭建一个Web服务器

【Go入门】 Go搭建一个Web服务器 前面小节已经介绍了Web是基于http协议的一个服务&#xff0c;Go语言里面提供了一个完善的net/http包&#xff0c;通过http包可以很方便的搭建起来一个可以运行的Web服务。同时使用这个包能很简单地对Web的路由&#xff0c;静态文件&#xff0c…

【Go入门】并发

【Go入门】并发 有人把Go比作21世纪的C语言&#xff0c;第一是因为Go语言设计简单&#xff0c;第二&#xff0c;21世纪最重要的就是并行程序设计&#xff0c;而Go从语言层面就支持了并行。 goroutine goroutine是Go并行设计的核心。goroutine说到底其实就是协程&#xff0c;…

华为OD机试 - 转盘寿司(Java JS Python C)

目录 题目描述 输入描述 输出描述 用例 题目解析 JS算法源码 Java算法源码

【力扣】从零开始的动态规划

【力扣】从零开始的动态规划 文章目录 【力扣】从零开始的动态规划开头139. 单词拆分解题思路 45. 跳跃游戏 II解题思路 5. 最长回文子串解题思路 1143. 最长公共子序列解题思路 931. 下降路径最小和解题思路 开头 本力扣题解用5题来引出动态规划的解题步骤&#xff0c;用于本…

Android图片涂鸦,Kotlin(1)

Android图片涂鸦&#xff0c;Kotlin&#xff08;1&#xff09; import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.Path import android.graphics.PointF import android.…

UE4动作游戏实例RPG Action解析三:实现效果,三连击Combo,射线检测,显示血条,火球术

一、三连Combo 实现武器三连击,要求: 1.下一段Combo可以随机选择, 2.在一定的时机才能再次检测输入 3. 等当前片段播放完才播放下一片段 1.1、蒙太奇设置 通过右键-新建蒙太奇片段,在蒙太奇里创建三个片段,并且移除相关连接,这样默认只会播放第一个片段 不同片段播…

图像分类(六) 全面解读复现MobileNetV1-V3

MobileNetV1 前言 MobileNetV1网络是谷歌团队在2017年提出的&#xff0c;专注于移动端和嵌入设备的轻量级CNN网络&#xff0c;相比于传统的神经网络&#xff0c;在准确率小幅度降低的前提下大大减少模型的参数与运算量。相比于VGG16准确率减少0.9%&#xff0c;但模型的参数只…

基于Vue+SpringBoot的大病保险管理系统 开源项目

项目编号&#xff1a; S 031 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S031&#xff0c;文末获取源码。} 项目编号&#xff1a;S031&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统配置维护2.2 系统参保管理2.3 大…

SDUT OJ《算法分析与设计》搜索算法

A - 子集和问题 Description 子集和问题的一个实例为〈S,t〉。其中&#xff0c;S{ x1 &#xff0c; x2 &#xff0c;…&#xff0c;xn }是一个正整数的集合&#xff0c;c是一个正整数。子集和问题判定是否存在S的一个子集S1&#xff0c;使得&#xff1a; 。 试设计一个解子…

坐标系下的运动旋量转换

坐标系下的运动旋量转换 文章目录 坐标系下的运动旋量转换前言一、运动旋量物体运动旋量空间运动旋量 二、伴随变换矩阵三、坐标系下运动旋量的转换四、力旋量五、总结参考资料 前言 对于刚体而言&#xff0c;其角速度可以写为 ω ^ θ ˙ \hat {\omega} \dot \theta ω^θ˙&…

Pytorch torch.exp()的使用举例

代码实验展示: Microsoft Windows [版本 10.0.18363.1256] (c) 2019 Microsoft Corporation。保留所有权利。C:\Users\chenxuqi>conda activate ssd4pytorch1_2_0(ssd4pytorch1_2_0) C:\Users\chenxuqi>python Python 3.7.7 (default, May 6 2020, 11:45:54) [MSC v.191…

无线WiFi安全渗透与攻防(N.3)WPA破解-创建Hash-table加速并用Cowpatty破解

WPA破解-创建Hash-table加速并用Cowpatty破解 WPA破解-创建Hash-table加速并用Cowpatty破解1.Cowpatty 软件介绍2.渗透流程1.安装CoWPAtty2.抓握手包1.查看网卡2.开启监听模式3.扫描wifi4.抓握手包5.进行冲突模式攻击3.STA重新连接wifi4.渗透WPA wifi5.使用大字典破解3.hash-ta…

STL总结

STL vector 头文件<vector> 初始化,定义,定义长度&#xff0c;定义长度并且赋值&#xff0c;从数组中获取数据返回元素个数size()判断是否为空empty()返回第一个元素front()返回最后一个数back()删除最后一个数pop_back()插入push_back(x)清空clear()begin()end()使用s…

SQL SERVER 2008安装教程

SQL SERVER 2008安装教程 本篇文章介绍了安装SQL Server 2008企业版的软硬件配置要求&#xff0c;安装过程的详细步骤&#xff0c;以及需要注意的事项。 安装步骤 (1). 在安装文件setup.exe上&#xff0c;单击鼠标右键选择“以管理员的身份运行”&#xff0c;如下图所示&#…

皮肤性病科专家谭巍主任提出HPV转阴后饮食七点建议

HPV转阴是每一位感染者都期盼的&#xff0c;因为转阴所以健康&#xff0c;只有转为阴性才意味着不具备传染性&#xff0c;从此也不必再害怕将病毒传染给家人的风险&#xff0c;也不必再担忧持续感染而引发的健康风险。总之&#xff0c;HPV转阴是预示感染者恢复健康与否的主要标…

《洛谷深入浅出进阶篇》P1995 程序自动分析——并查集,离散化

上链接&#xff1a;P1955 [NOI2015] 程序自动分析 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1955 上题干&#xff1a; 首先给你一个整数t&#xff0c;代表t次操作。 每一次操作包含以下内容&#xff1a; 1.给你一个整数n&#xff0c;让…