Vue开发日志:宏观布局

Vue开发日志:宏观布局

  • 总纲
  • 拆分
    • 组件化开发:拆分页面
    • 模块化开发:拆分功能
    • 两者的关系
  • 集成
    • 组件传参
    • 父组件向子组件传参
    • 子组件接收参数
    • 子组件向父组件传参
    • 父组件接收参数
    • 场记

总纲

不识庐山真面目,只缘身在此山中

跳出三界之外,才能看清全局

拆分

天下大势,合久必分。
原始的开发方式,将所有的东西都塞到一个容器里,维护起来,相当头痛。

要在几千上万行代码内理清每部分的关系,简直是将世界地图一字不落的全塞到脑子里来进行,除非有过目不忘的本领,但大多数人是普通人,如果不能让大多数人都使用的技术,他就无法量产,不能量产,就无法形成行业,这个社会也无法发展。

从零到一,是在世界的天花板上开一个小口。而从一到万,则是由量变引发质变。不完成这个闭环,任何社会都玩完。因为你不动,世界在动,不适应就被淘汰,物竞天择,自然大道!

组件化开发:拆分页面

Vue的开发过程,就像是搭积木。每个页面内包含很多的模块,每个模块就是一块积木。准备好所有积木,然后拼装在一起,就完成了Vue的开发过程。

这里的每个积木,就是一个组件。

反思:如何掌握搭建积木的脚手架,就像是造房屋,得有总设计图。拿到这个设计图,一切都好办了,设计图就是接口,只定义,占位,不去实现。实现交给技术开发人员,总工程师就是架构师,永远关注的是整体。

目的:将整体功能做一个拆分,分治思想是顶层思想。
分治的目的:在于高效,之所以能高效,在于能够直观的迅速定位到出现问题的地方,通过文件索引即可定位到组件,而非在整体一个大地图内去查找。
因此分治就引入了封装,只有封装,才是在做分治的工作。
目的是降低维护压力,因为组件是直观符合人性的。

模块化开发:拆分功能

两者的关系

拆分页面的多个积木都有可能用到一个模块,就是功能拆分后的子功能。这样就实现了阿米巴管理方法,页面就像是空间,功能就像是时间。没有空间的时间,毫无意义。没有时间的空间,将是静止的,没有希望的。两者谁也离不开谁,因此组件和模块是双生子,同时出现在应用的任意位置上。当然,其实没有功能的静态页面,相当于是一个实现了一个什么都不做的功能,必须要适应这种思维,因为大自然厌恶真空,所以,需要一个空功能来填充这个页面,这样就泛化了开发世界。大家都是遵循一样的规律,静态页面只是动态页面的一个极端示例。

集成

天下大势,分久必合

只有将拆分的功能和页面,拼装在一起,才能构筑一个应用。

组件传参

要拼接组件,组件传参是绕不过去的一个关卡,必须拿下,其为咽喉,攻取后四通八达。

父组件向子组件传参

由子组件接收参数,处理后,展示或回传。
示例:

# 父组件
<child></child>
# 子组件
<script>
export default{
}
</script>

要在父组件中传参,比如:传递一个叫信息的参数,键名为message。

# 父组件
<child v-bind:message="msg"></child>
<script>
export default{data(){return{msg:'hello'}}
}
</script>

在父组件中定义一个数据叫msg,然后通过在child子组件标签中v-bind的形式绑定msg,绑定到子组件的message属性上。这样,当父组件的msg变化后,会同时传递到子组件的message中。这样就完成了,组件传参的过程。
注意:这里的v-bind:message=“msg” 可以缩写成 :message=“msg”,实际开发中都会用后一种形式。

子组件接收参数

# 子组件
<script>
export default{props:[],//props:{},
}
</script>

在子组件中,通过props属性来接收,传入的参数。有两种形式,一为数组,二为对象。

先看数组

# 子组件
<script>
export default{props:["message"],
}
</script>

通过在数组中写入键名,完成参数的注册工作。如果要展示,在template中渲染一下即可。

# 子组件
<template><div>{{ message }}</div>
</template>
<script>
export default{props:["message"],
}
</script>

这个过程就像同城配送:
父组件就像是整个城市,子组件是城市内某个具体的小区。
message就像是具体的门牌号,如果门牌号填错,那就无法配送到你手中。因此父子组件中的message书写一定要一致,保证能够配送到手。

理解了这种模式,接下来看下对象模式。

# 子组件
<template><div>{{ message }}</div>
</template>
<script>
export default{//props:["message"],props:{message:string,},
}
</script>

原则都是一样的,门牌号填写正确,而后面填写的值有所不同。
需要填写传递过来的参数的数据类型,这里message绑定的是父组件的msg,查看一下,是字符串类型,因此,后面就要填写string。
不仅如此,内部的门牌号还可以填写更详细的配置信息,就像是一些个性化的备注信息。

# 子组件
<template><div>{{ message }}</div>
</template>
<script>
export default{//props:["message"],props:{message:{type:string,default:'默认值:如果父组件没有传参过来时,用这个占位'}},
}
</script>

type就是参数的类型,default就是无参时的默认值。此外,还有很多的配置,这里不赘述,只提供整体思路。会写一二三,就会写百千万。这就是师傅领进门,修行靠个人!

子组件向父组件传参

接下来,要想将子组件处理好的结果,传递回到父组件中,我们可以使用事件的冒泡:

this.$emit();//拥有两个参数:参数1:事件名称;参数2:传递的参数

应用到例子中:

# 子组件
<template><div>{{ message }}</div>
</template>
<script>
export default{//props:["message"],props:{message:{type:string,default:'默认值:如果父组件没有传参过来时,用这个占位'}},methods:{setNum(){let count = 666;this.$emit('sendData',count);//发送事件}}
}
</script>

首先,在methods中添加一个方法,比如setNum。在这里发送事件,把count这个值给传递出去。

就像是同城配送中的送达给好评。count = 666,就是给了一个666的好评!

父组件接收参数

接收参数,我们通过自定义事件:@sendData

# 父组件
<child :message="msg" @sendData="getNum"></child>
<script>
export default{data(){return{msg:'hello'}},methods:{getNum(num){alert(num)}}
}
</script>

这里@sendData绑定一个叫做getNum的方法,有这个方法来接收要子组件传递过来的参数。
getNum在这里相当于就是回调函数。

这部分就像是配送公司,得到了用户的好评反馈后,进行官方APP展示好评。这里可以做各种自定义处理了,比如,是好评就置顶,是差评就置底,哈哈!

场记

在 Vue.js 中,HTML 特性名(attribute names)遵循的是 HTML 规范,要求使用短横线(kebab-case)命名方式,即连字符分隔的小写形式。这是因为浏览器只识别这种形式的特性名。

但在 Vue 的模板语法或者 JavaScript 中定义组件的 props 时,由于 Vue 的 JavaScript 特性,我们使用驼峰命名(camelCase)来定义 prop。例如:

<!-- 在父组件模板中使用 kebab-case -->
<child-component my-prop-name="value"></child-component>
// 在子组件中使用 camelCase 来定义 prop
export default {props: {myPropName: String // 驼峰命名}
}

当 Vue 解析模板时,它会自动将模板中 kebab-case 的属性名转换为 camelCase 形式,使得父组件传递的 prop 能够正确匹配到子组件定义的 prop 上。所以尽管在模板中使用了短横线命名,但在 JavaScript 中仍然使用驼峰命名来保持一致性。这样做的好处是可以遵循 JavaScript 的编码规范,同时也能兼容 HTML 的书写规则。

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

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

相关文章

TypeScript基础知识点详解

TypeScript基础知识点详解 引言&#xff1a; 在现代前端开发中&#xff0c;TypeScript作为一种静态类型的JavaScript超集&#xff0c;越来越受到开发者的青睐。它提供了类型检查、编译时错误提示、代码重构和智能提示等功能&#xff0c;使得代码更加健壮、可维护。本文将详细介…

AI能不断进化吗?

AI的进化是一个持续的过程&#xff0c;并且随着时间推移和技术的发展&#xff0c;AI可以不断进化。这种进化可以包括以下几个方面&#xff1a; 1、算法和模型的改进&#xff1a; AI的进化可以通过改进其算法和模型来实现。研究人员不断提出新的算法和模型&#xff0c;使得AI在…

c语言中的宏指的是什么

在C语言中&#xff0c;宏&#xff08;Macro&#xff09;是一种预处理器的功能&#xff0c;用于将代码片段命名并用一个标识符替代。宏定义通过 #define 关键字完成&#xff0c;可以用于表示常量、创建函数样式的代码块&#xff0c;以及执行简单的文本替换。 举个例子&#xff…

Linux下定位内存踩踏问题的一种方法

Linux下定位内存踩踏问题的一种方法 演示代码(main.cpp)编译并执行输出 我们在Linux下用C/C开发具有一定复杂性的系统时,需要集成多个部门开发的SDK。内存越界的问题,往往让人头疼。本文提供了一种思路,用来定位内存踩踏。 开发者应该清楚哪块内存不应该被写入(或padding一块只…

IT基础监控与各IT体系模块的深化关系及其作用详解

IT基础监控作为运维工作的“眼睛”和“耳朵”&#xff0c;始终贯穿于自动化、容器化、云原生、团队协作及智能运维的实践中。以下是对IT基础监控与各IT体系模块之间关系的进一步补充和深化。 1. IT基础监控与自动化的深化关系 在自动化运维的实践中&#xff0c;基础监控不仅是…

C++11_C++回顾

范围for 对于一个有范围的集合而言&#xff0c;由程序员来说明循环的范围是很多余的&#xff0c;有时还很容易犯错误。因此C中引入了基于范围for循环。for循环后的括号由冒号":"分为两部分&#xff0c;第一部分是范围内用于迭代的变量&#xff0c;第二部分则表示被迭…

智慧餐饮系统架构的设计与实现

随着科技的不断发展&#xff0c;智慧餐饮系统在餐饮行业中扮演着越来越重要的角色。智慧餐饮系统整合了信息技术&#xff0c;以提高餐饮企业的管理效率、客户服务质量和市场竞争力。本文将探讨智慧餐饮系统架构的设计与实现&#xff0c;并探讨其在餐饮行业中的应用前景。 架构…

大文件上传

分片上传 将文件分为多个大小相等的小块&#xff0c;提高并发 前端将切割的每个分片按顺序传送给后端 后端收到分片后&#xff0c;记录特征信息&#xff08;MD5&#xff09; 按序号进行拼接 断点续传 将文件分为几个小块 每次上传时记录一个块信息&#xff0c;例如文件MD…

matlab采用不同数值方法求解微分方程

1、内容简介 略 60-可以交流、咨询、答疑 欧拉方法、改进欧拉、RK4、米尔斯坦方法求解微分方程 2、内容说明 略 lc; close all; clear all; % 参数赋值 global a global b global h a 1; b 2; Ni 1000; % 总步数 h 0.001; % 步长Xt1(1:Ni) 0; Xt2(…

【前端素材】推荐优质后台管理系统PORTAL平台模板(附源码)

一、需求分析 后台管理系统是一种具有多层次结构的软件系统&#xff0c;用于管理网站、应用程序或系统的后台操作和管理。下面是对后台管理系统的分层次、详细分析&#xff1a; 第一层&#xff1a;用户界面层 登录界面&#xff1a;提供用户登录验证&#xff0c;确保只有经过授…

MySQL 数据优化技巧:提升百万级数据聚合统计速度

MySQL 数据优化技巧&#xff1a;提升百万级数据聚合统计速度 MySQL 数据优化技巧&#xff1a;提升百万级数据聚合统计速度摘要引言索引优化1. 使用合适的索引类型2. 聚簇索引的应用 查询优化3. 减少数据检索范围4. 避免全表扫描 数据库设计优化5. 合理划分数据表6. 使用分区表 …

AI如何与企业应用交互

人工智能&#xff08;AI&#xff09;与企业应用的交互可以通过多种方式实现&#xff0c;以下是一些常见的方式&#xff1a; 1、智能助理和聊天机器人&#xff1a;企业可以在其应用程序中集成智能助理或聊天机器人&#xff0c;以帮助用户解决常见问题、获取信息或执行特定任务。…

算法训练营day35, 二叉搜索树的范围和

package main type TreeNode struct { Val int Left *TreeNode Right *TreeNode } //938. 二叉搜索树的范围和 func rangeSumBST(root *TreeNode, low int, high int) int { sum : 0 if root nil { return sum } //中序遍历左中右处理即可 var searchBST func(node *Tr…

零基础学Python入门教程非常详细(从小白到高级),入门必看

目录&#xff1a;基础 第一章-第五章&#xff08;5.1-5.4&#xff09;&#xff1a;简介、配置与基础知识 第六章&#xff1a;判断语句 第一章&#xff1a;Python的概述 1.1&#xff1a;什么是Python? Python它是一种直译式&#xff0c;面向对象&#xff0c;解释式的脚本语…

NASA Earthdata wget批量下载

1 wegt下载 GNU Wget 1.21.4 for Windows (eternallybored.org) 2 创建your .urs_cookies and .dodsrc文件 只需要创建.urs_cookies文件 其实&#xff0c;通过txt可以直接创建 这个文件你想放到哪里&#xff0c;就放到哪里 Create .urs_cookies file: On Mac/Linux: cd ~ o…

QT TCP通讯客户端与服务端

服务端 // 自定义如下 private:QTcpServer *tcpserver; //TCP服务器QTcpSocket *tcpsocket;// TCP通讯socketQString GetLocalIpAddress(); // 获取本机的IP地址private slots:void clientconnect();void clientdisconnect();void socketreaddata();void newconnection();void …

[C++]C++计算时间

在C中&#xff0c;有几种方法可以用来统计代码的运算时间&#xff1a; 使用std::chrono库&#xff1a; C11引入了chrono库&#xff0c;用于处理时间相关的操作。通过使用std::chrono::system_clock和std::chrono::duration_cast&#xff0c;可以很容易地测量代码段的执行时间。…

图片上叠加文字

在一个原有图片上叠加上指定的文字 编写一个工具类实现文字叠加的功能&#xff0c;叫ImageUttils import cn.hutool.core.img.Img; import cn.hutool.core.io.resource.Resource;import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Val…

绝对路径拼接漏洞 [NISACTF 2022]babyupload

打开题目 最开始以为是文件上传的漏洞 结果发现无论我们上传什么文件都会显示bad filename 去网上看了大佬的wp知道 我们直接去看源代码得到提示 /source 那我们去访问一下这个路径看看 得到一个下载文件 用记事本打开得到 源代码如下 from flask import Flask, request, r…

软考46-上午题-【数据库】-数据查询语言DQL1

一、SQL数据查询功能 SELECT语句的语法如下&#xff1a; 【注意】&#xff1a; 使用DISTINCT选项可以去重&#xff1b; form子句中出现多个基本表或视图时&#xff0c;系统首先执行笛卡尔积操作。 下面的查询示例均以这些表为基础 1-1、投影查询-SELECT 【回顾】&#xff1a;…