前端:VUE2

vue官网:https://cn.vuejs.org/

服务端渲染

服务器浏览器服务器浏览器组装页面(服务端渲染)http://duyi.com/news完整页面

前后端分离

服务器浏览器服务器浏览器运行js,创建元素,渲染页面http://duyi.com/news无内容的htmlajax各种业务数据

单页应用

服务器浏览器服务器浏览器运行js,创建元素,渲染页面跳转页面JS重新构建页面元素http://duyi.com/news无内容的htmlajax各种业务数据ajax各种业务数据

vue框架

服务器浏览器服务器浏览器运行包含vue的js,使用框架渲染页面使用vue-router跳转页面http://duyi.com/news无内容的htmlajax各种业务数据

注入

vue会将以下配置注入到vue实例:

  • data:和界面相关的数据
  • computed:通过已有数据计算得来的数据,将来详细讲解
  • methods:方法

模板中可以使用vue实例中的成员

虚拟DOM树

直接操作真实的DOM会引发严重的效率问题,vue使用虚拟DOM(vnode)的方式来描述要渲染的内容

vnode是一个普通的JS对象,用于描述界面上应该有什么,比如:

varvnode={tag:"h1",children:[{tag:undefined,text:"第一个vue应用:Hello World"}]}

上面的对象描述了:

有一个标签名为h1的节点,它有一个子节点,该子节点是一个文本,内容为「第一个vue应用:Hello World」

vue模板并不是真实的DOM,它会被编译为虚拟DOM

<divid="app"><h1>第一个vue应用:{{title}}</h1><p>作者:{{author}}</p></div>

上面的模板会被编译为类似下面结构的虚拟DOM

{tag:"div",children:[{tag:"h1",children:[{text:"第一个vue应用:Hello World"}]},{tag:"p",children:[{text:"作者:袁"}]}]}

虚拟DOM树会最终生成为真实的DOM树

当数据变化后,将引发重新渲染,vue会比较新旧两棵vnode tree,找出差异,然后仅把差异部分应用到真实dom tree中

可见,在vue中,要得到最终的界面,必须要生成一个vnode tree

vue通过以下逻辑生成vnode tree:

注意:虚拟节点树必须是单根的

挂载

将生成的真实DOM树,放置到某个元素位置,称之为挂载

挂载的方式:

  1. 通过el:"css选择器"进行配置
  2. 通过vue实例.$mount("css选择器")进行配置

完整流程

组件的出现是为了实现以下两个目标:

  1. 降低整体复杂度,提升代码的可读性和可维护性
  2. 提升局部代码的可复用性

绝大部分情况下,一个组件就是页面中某个区域,组件包含该区域的:

  • 功能(JS代码)

  • 内容(模板代码)

  • 样式(CSS代码)

    要在组件中包含样式,需要构建工具的支撑

组件开发

创建组件

组件是根据一个普通的配置对象创建的,所以要开发一个组件,只需要写一个配置对象即可

该配置对象和vue实例的配置是几乎一样

//组件配置对象varmyComp={data(){return{// ...}},template:`....`}

值得注意的是,组件配置对象和vue实例有以下几点差异:

  • el
  • data必须是一个函数,该函数返回的对象作为数据
  • 由于没有el配置,组件的虚拟DOM树必须定义在templaterender

注册组件

注册组件分为两种方式,一种是全局注册,一种是局部注册

全局注册

一旦全局注册了一个组件,整个应用中任何地方都可以使用该组件

全局注册的方式是:

// 参数1:组件名称,将来在模板中使用组件时,会使用该名称// 参数2:组件配置对象// 该代码运行后,即可在模板中使用组件Vue.component('my-comp',myComp)

在模板中,可以使用组件了

<my-comp/><!-- 或 --><my-comp></my-comp>

但在一些工程化的大型项目中,很多组件都不需要全局使用。
比如一个登录组件,只有在登录的相关页面中使用,如果全局注册,将导致构建工具无法优化打包
因此,除非组件特别通用,否则不建议使用全局注册

局部注册

局部注册就是哪里要用到组件,就在哪里注册

局部注册的方式是,在要使用组件的组件或实例中加入一个配置:

// 这是另一个要使用my-comp的组件varotherComp={components:{// 属性名为组件名称,模板中将使用该名称// 属性值为组件配置对象"my-comp":myComp},template:`<div> <!-- 该组件的其他内容 --> <my-comp></my-comp> </div>`;}

应用组件

在模板中使用组件特别简单,把组件名当作HTML元素名使用即可。

但要注意以下几点:

  1. 组件必须有结束

组件可以自结束,也可以用结束标记结束,但必须要有结束

下面的组件使用是错误的:

<my-comp>
  1. 组件的命名

无论你使用哪种方式注册组件,组件的命名需要遵循规范。

组件可以使用kebab-case 短横线命名法,也可以使用PascalCase 大驼峰命名法

下面两种命名均是可以的

varotherComp={components:{"my-comp":myComp,// 方式1MyComp:myComp//方式2}}

实际上,使用小驼峰命名法 camelCase也是可以识别的,只不过不符合官方要求的规范

使用PascalCase方式命名还有一个额外的好处,即可以在模板中使用两种组件名

varotherComp={components:{MyComp:myComp}}

模板中:

<!-- 可用 --><my-comp/><MyComp/>

因此,在使用组件时,为了方便,往往使用以下代码:

varMyComp={//组件配置}varOtherComp={components:{MyComp// ES6速写属性}}

组件树

一个组件创建好后,往往会在各种地方使用它。它可能多次出现在vue实例中,也可能出现在其他组件中。

于是就形成了一个组件树

向组件传递数据

大部分组件要完成自身的功能,都需要一些额外的信息

比如一个头像组件,需要告诉它头像的地址,这就需要在使用组件时向组件传递数据

传递数据的方式有很多种,最常见的一种是使用组件属性 component props

首先在组件中申明可以接收哪些属性:

varMyComp={props:["p1","p2","p3"],// 和vue实例一样,使用组件时也会创建组件的实例// 而组件的属性会被提取到组件实例中,因此可以在模板中使用template:`<div> {{p1}}, {{p2}}, {{p3}} </div>`}

在使用组件时,向其传递属性:

varOtherComp={components:{MyComp},data(){return{a:1}},template:`<my-comp :p1="a" :p2="2" p3="3"/>`}

注意:在组件中,属性是只读的,绝不可以更改,这叫做单向数据流

工程结构

见代码

vue-cli: https://cli.vuejs.org/zh/

vue-cli

vue-cli是一个脚手架工具,用于搭建vue工程

它内部使用了webpack,并预置了诸多插件(plugin)和加载器(loader),以达到开箱即用的效果

除了基本的插件和加载器外,vue-cli还预置了:

  • babel
  • webpack-dev-server
  • eslint
  • postcss
  • less-loader

SFC

单文件组件,Single File Component,即一个文件就包含了一个组件所需的全部代码

<template><!-- 组件模板代码 --></template><script>exportdefault{// 组件配置}</script><style>/* 组件样式 */</style>

预编译

vue-cli进行打包时,会直接把组件中的模板转换为render函数,这叫做模板预编译

这样做的好处在于:

  1. 运行时就不再需要编译模板了,提高了运行效率
  2. 打包结果中不再需要vue的编译代码,减少了打包体积

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

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

相关文章

毕业论文全流程智能辅导指南:百考通AI如何化解写作难题

当秋季学期开始&#xff0c;学校的毕业论文通知如期而至&#xff0c;从选题、开题到撰写、修改&#xff0c;再到提交、答辩&#xff0c;这场历时数月的“马拉松”让无数学生倍感压力。作为一名经历过这一切的过来人&#xff0c;我深刻理解其中的艰辛与挑战。 今天&#xff0c;…

COMSOL——底层逻辑弱形式

COMSOL的底层逻辑&#xff0c;如何去求解物理场的。通常一个微分方程是根据一个场φ的方程&#xff0c;这里的φ可以是温度场、电场等等。方程包含场φ本身、一阶导数项、二阶导数项等等&#xff0c;进行一个组合运算最后为0。对于每一个点&#xff0c;都要保证这个等式是成立的…

ToolBlock高级脚本之显示XYA和二维码

显示XYA和二维码 using Cognex.VisionPro.ImageProcessing; using Cognex.VisionPro.CalibFix; using Cognex.VisionPro.PMAlign; using Cognex.VisionPro.Caliper; using Cognex.VisionPro.Dimensioning; using Cognex.VisionPro.ID; using Cognex.VisionPro.Blob ; using Sys…

从0到1搭建RWA协议:链下资产上链的全链路攻略

引言&#xff1a;RWA——区块链与现实世界的“价值高速公路”在加密货币市值突破3万亿美元的今天&#xff0c;区块链技术正从“数字游戏”向“价值载体”进化。然而&#xff0c;一个残酷的现实是&#xff1a;全球99%的资产仍存在于链下世界——从黄金、房地产到股票、知识产权&…

图吧工具箱最新绿色版,内置电脑cpu硬盘硬件多种检测工具,绿色免费

下载链接 https://tool.nineya.com/s/1jbp2a27f 软件介绍 图吧工具箱&#xff0c;是开源、免费、绿色、纯净的硬件检测工具合集&#xff0c;专为计算机硬件极客、DIY爱好者、各路大神及小白制作。集成常见硬件检测、评分工具&#xff0c;一键下载、方便使用。 软件特点 专业…

四旋翼飞行器:从路径规划到轨迹跟踪的奇妙之旅

四旋翼飞行器轨迹跟踪仿真路径规划控制 路径规划与轨迹 最小加速度轨迹最小捕捉轨迹 四旋翼无人机嘿&#xff0c;各位技术宅们&#xff01;今天咱们来聊聊超酷炫的四旋翼飞行器&#xff0c;这玩意儿在无人机领域那可是相当热门。咱主要探讨探讨它的路径规划与轨迹跟踪仿真&…

三大删除命令:MySQL 核心用法解析

在面试中&#xff0c;当被问及TRUNCATE、DELETE和DROP的区别时&#xff0c;面试官的考察点往往不仅限于对三条命令的表面理解。其更深层的意图在于评估候选人是否具备以下维度的知识与能力&#xff1a;1.理解操作的本质分类&#xff1a;能否清晰辨别DDL&#xff08;数据定义语言…

2026年AI论文工具最新流出!8款免费神器实测,选题到降重一站式搞定!

紧急预警&#xff1a;2026论文季倒计时&#xff01;你还在靠熬夜赶稿&#xff1f; 凌晨3点的图书馆、满屏飘红的查重报告、导师第12次打回的修改意见——如果你正在经历这些&#xff0c;现在立刻停下无效加班&#xff01; 2026年最新AI论文工具已提前曝光&#xff0c;8款免费…

20260106_165519_大模型中的MCP、RAG、Agent定义及关系

MCP、RAG、Agent 是 LLM 应用架构的三大核心组件。 1、MCP&#xff08;Model Control Plane&#xff0c;模型控制平面&#xff09; 定义&#xff1a;管理 LLM 全生命周期的 “调度中枢”&#xff0c;负责模型选型、部署、负载均衡、版本控制、权限管理等。核心价值&#xff1…

在claude code中使用glm模型出现Unable to connect to Anthropic services的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

基于PLC的饮料灌装控制系统:从梯形图到组态画面的实现

S7-200 MCGS 基于PLC的饮料灌装控制系统 带解释的梯形图程序&#xff0c;接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面在自动化生产领域&#xff0c;饮料灌装控制系统是一个典型应用场景&#xff0c;结合S7 - 200 PLC与MCGS组态软件能高效实现这一系统。下面我们来…

比Everything更好用!文档内容搜索神器,检索文档内文字内容,提高工作效率

下载链接 https://tool.nineya.com/s/1jbp36kuv 软件介绍 电脑日积月累的使用&#xff0c;在文件数量众多的情况下&#xff0c;要立刻找到对应的相关文字片段&#xff0c;是一件相当繁琐的事&#xff0c;Anytxt 致力于为用户轻松解决文件查找&#xff0c;提高工作效率。Anyt…

DAO 2.0技术白皮书:从DApp代码嵌入到共识治理的完整开发指南

引言&#xff1a;当DApp遇见DAO&#xff0c;一场权力结构的范式革命在Web3的浪潮中&#xff0c;DApp&#xff08;去中心化应用&#xff09;正以颠覆性姿态重塑互联网生态。从DeFi的借贷协议到NFT市场的创作者经济&#xff0c;从社交平台的链上身份到元宇宙的虚拟资产交易&#…

ACPI!ParseScope函数分析中的ACPI!ParseOpcode到ACPI!ParseTerm中的ACPI!ParsePackageLen

ACPI!ParseScope函数分析中的ACPI!ParseOpcode到ACPI!ParseTerm中的ACPI!ParsePackageLenMethod (_CRS, 0, Serialized) // _CRS: Current Resource Settings{CreateWordField (RSRC, \_SB.PCI0.ISA.MBRD._Y0E._MIN, PMMN) // _MIN: Minimum Base AddressCreateWordField (RS…

Aurix TC387 Can配置记录

一、MCMCAN介绍fSYN is supplied from fMCANH and fASYN is supplied from fMCAN from CCU. fSYN is used as the clock source for Register and RAM interface,fASYN is used to generate the nominal and fast CAN FD baudrates. It is recommended to use fASYN as 80, 40,…

python--数据结构--链表

最近会更新很多内容&#xff0c;感兴趣的友友支持一下吧&#xff01;&#xff01;一、链表介绍概述:属于线性结构, 即: 每个节点都有1个父节点(前驱节点) 和 1个子节点(后继节点)链表可以看做是 用链条(一根绳) 把节点连接起来的 一种结构.节点介绍(此处以 单链表举例):由 元素…

【计算机毕业设计案例】深度学习基于python的手势识别数字

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

2027年80%平台将出局?数藏行业合规化与技术革命双轨突围指南

引言&#xff1a;当数字藏品陷入“信任危机”2025年&#xff0c;数字藏品市场迎来关键转折点。一方面&#xff0c;全球市场规模突破千亿美元&#xff0c;中国用户规模超2亿&#xff1b;另一方面&#xff0c;行业乱象频发&#xff1a;某头部平台因二级市场炒作被立案调查&#x…

原理:XinServer 是如何实现开箱即用的后端服务的?

原理&#xff1a;XinServer 是如何实现开箱即用的后端服务的&#xff1f; 不知道你有没有过这种经历&#xff1a;产品经理或者客户拿着一个原型图过来&#xff0c;说“咱们这个App/小程序/管理后台&#xff0c;下个月能上线吗&#xff1f;”你一看&#xff0c;好家伙&#xff0…

音乐喷泉博途V14与MCGS7.7触摸屏程序资料包2:探索奇妙的喷泉世界

音乐喷泉博途v14和mcgs7.7触摸屏程序资料包2&#xff0c;带运行效果视频&#xff0c;流程图和io表最近在研究自动化控制项目时&#xff0c;发现了一款超有趣的资料包——音乐喷泉博途V14和MCGS7.7触摸屏程序资料包2 &#xff0c;还附带运行效果视频、流程图以及IO表&#xff0c…