Vue.js 前端开发实战之 04-Vue 开发基础(3)

全局 API

Vue.directive

Vue 中有很多内置指令,除了内置指令外还可以根据需求使用 Vue.directive 注册自定义指令。

Vue.directive 的基本用法:

<divid="app"><inputtype="text"v-指令名称="指令的值"></div><script>// Vue.directive():自定义指令// 参数1:自定义指令名称// 参数2:指令的配置对象Vue.directive('name',{// inserted:指令生命周期钩子函数,元素第一次插入页面中时触发// el:使用指令的元素本身// binding:指令的配置信息// binding.value:指令的值inserted(el,binding){// 指令操作}})</script>

示例:Vue.directive

入口页面(index.html):

<divid="app"><inputtype="text"v-focus="true"></div><script>Vue.directive('focus',{inserted(el,binding){if(binding.value){// 获取焦点el.focus();}}})letvm=newVue({el:'#app'})</script>

示例效果:


Vue.use

Vue.use 主要用于在 Vue 中安装插件,通过插件可以为 Vue 添加全局功能。

Vue.use 会自动阻止多次安装同一个插件,因此,当在同一个插件上多次调用 Vue.use 时实际只会被安装一次。

Vue.js 官方提供的一些插件(如 vue-router)在检测到 Vue 是可访问的全局变量时,会自动调用 Vue.use,但在 CommonJS 等模块环境中(如 Node.js 等),始终需要 Vue.use 显式调用。

Vue.use 的基本用法:

// 定义插件对象letpluginObj={}// 为插件提供install方法// Vue:Vue实例对象// option:插件参数pluginObj.install=function(Vue,option){// ...}// Vue.use():安装插件// 参数1:插件对象// 参数2:插件配置参数Vue.use(pluginObj,{// ...})

示例:Vue.use

入口页面(index.html):

<divid="app"><demo-component></demo-component></div><script>letMyPlugin={}MyPlugin.install=function(Vue,option){Vue.component('demo-component',{data(){return{message:option.message}},template:'<h1>这是插件内定义的组件,参数为:{{option.message}}</h1>'})}Vue.use(MyPlugin,{message:'hello, plugin'})letvm=newVue({el:'#app'})</script>

示例效果:


Vue.extend

Vue.extend 用于基于 Vue 构造器创建一个 Vue 子类,可以对 Vue 构造器进行扩展。

Vue.extend 的基本用法:

// Vue2继承Vue,并实现某些特性letVue2=Vue.extend({// data:在Vue.extend()中使用时只能是一个函数data(){return{// ...}},methods:{// ...}})

示例:Vue.extend

入口页面(index.html):

<divid="app1">title:{{title}}</div><divid="app2">title:{{title}}</div><script>// Vue2继承Vue,并实现某些特性letVue2=Vue.extend({// data:在Vue.extend()中使用时只能是一个函数data(){return{title:'Vue2的标题'}},methods:{}})letvm1=newVue({el:'#app1',})letvm2=newVue2({el:'#app2',})</script>

示例效果:


Vue.set

Vue.set 用于向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新,主要用于解决在 Vue 实例创建后,向现有对象添加新属性或修改现有属性的值的情况。

Vue.set 的基本用法:

// target:要添加或修改属性的目标对象// key:要添加或修改的属性键// value:要设置的属性值Vue.set(target,key,value);

示例:Vue.set

入口页面(index.html):

<divid="app">name: {{user.name}}<br>age: {{user.age}}</div><script>letvm=newVue({el:'#app',data:{user:{name:'张三'}}})Vue.set(vm.user,'age','18')setTimeout(function(){Vue.set(vm.user,'age','28')},3000)</script>

示例效果:


Vue.mixin

Vue.mixin 用于全局注册一个混入(Mixins),它将影响之后创建的每个 Vue 实例。

Vue.mixin 的基本用法:

// 参数1:混入的对象,包含要在组件中共享的属性、方法或生命周期钩子Vue.mixin({data(){return{// ...}}})

示例:Vue.mixin

入口页面(index.html):

<divid="app">msg:{{msg}}</div><script>Vue.mixin({data(){return{msg:'混入的数据'}},created(){console.log('混入的created')}})letvm=newVue({el:'#app',created(){console.log('Vue实例自身的created')}})</script>

示例效果:


实例属性

vm.$props

vm.$props 属性用于接收上级组件向下传递的数据。


示例:vm.$props

入口页面(index.html):

<divid="app"><h3>父组件</h3>请输入要传递给子组件的内容:<inputv-model="msg"><my-component:msg="msg"></my-component></div><script>letvm=newVue({el:'#app',data:{msg:""},components:{myComponent:{props:['msg'],template:'<div>父组件传递给子组件的内容:{{msg}}</div>',watch:{msg(){// this.$props.msg:获取父组件传递给子组件的参数msg// 也可以使用this.msg获取console.log("监听到父组件传递给子组件的内容是:"+this.msg)}}}}})</script>

示例效果:


vm.$options

Vue 实例初始化时,除了传入指定的选项外,还可以传入自定义选项,自定义选项的值可以是数组、对象、函数等。

vm.$options 属性用于获取 Vue 实例中的自定义选项,自定义选项不具有响应特性。


示例:vm.$options

入口页面(index.html):

<divid="app"><button@click="getOption">获取自定义选项</button></div><script>letvm=newVue({el:'#app',customOption:'我是自定义数据',methods:{getOption(){console.log(this.$options.customOption)}}})</script>

示例效果:


vm.$el

vm.$el 用于访问 Vue 实例使用的根 DOM 元素。


示例:vm.$el

入口页面(index.html):

<divid="app"><p>原来的HTML</p></div><script>letvm=newVue({el:'#app'})vm.$el.innerHTML="<h3>new html</h3>"</script>

示例效果:


vm.$children

vm.$children 属性用于获取当前实例的直接子组件,其获取的直接子元素并不保证按顺序,也不是响应式的。


示例:vm.$children

入口页面(index.html):

<divid="app"><button@click="click">获取子组件</button><my-child>1</my-child><my-child>2</my-child></div><script>Vue.component('my-child',{template:'<h3>子组件<slot></slot></h3>'})letvm=newVue({el:'#app',methods:{click(){console.log(this.$children)}}})</script>

示例效果:


vm.$root

vm.$root 属性用于获取当前组件树的根 Vue 实例,如果当前实例没有父实例,则获取到的是该实例本身。


示例:vm.$root

入口页面(index.html):

<divid="app"><my-component></my-component></div><script>Vue.component('my-component',{template:'<button @click="click">查看根实例</button>',methods:{click(){// 判断当前组件的根实例和vm实例是否一致console.log(this.$root==vm.$root)}}})letvm=newVue({el:'#app'})</script>

示例效果:


vm.$slots

vm.$slots 属性用于获取组件的插槽。


示例:vm.$slots

入口页面(index.html):

<divid="app"><my-component><templatev-slot:slot01><div>Hello,Vue</div></template><templatev-slot:slot02><div>Hello,Component</div></template><templatev-slot:slot03><div>Hello,Slots</div></template></my-component></div><templateid="myTemplate"><div><slotname="slot01"></slot><slotname="slot02"></slot><slotname="slot03"></slot></div></template><script>Vue.component('my-component',{template:'#myTemplate',created(){console.log(this.$slots)}})letvm=newVue({el:'#app'})</script>

示例效果:


vm.$attrs

vm.$attrs 属性用于获取组件的属性,获取的属性不包括 class、style、被声明为 props 的属性。


示例:vm.$attrs

入口页面(index.html):

<divid="app"><my-componentid="test"class="test"name="hello"></my-component></div><script>Vue.component('my-component',{template:'<button @click="showAttrs">查看组件属性</button>',methods:{showAttrs(){console.log(this.$attrs)}}})letvm=newVue({el:'#app'})</script>

示例效果:


vm.$refs

vm.$refs 属性用于获取和修改页面内容,但一般情况下 Vue 不推荐直接使用 $refs 修改页面的内容。


示例:vm.$refs

入口页面(index.html):

<divid="app"><divid="box"ref="box">hello vue</div></div><script>letvm=newVue({el:'#app',mounted(){console.log(document.getElementById('box').innerHTML)console.log(this.$refs.box.innerHTML)}})</script>

示例效果:


全局配置

productTip

productionTip 属性用于设置在开发环境下(vue.js)是否开启提示信息。

productionTip 的基本用法:

Vue.config.productionTip=false|true;

在某些 Vue.js 版本中,通过 productionTip 属性无法关闭提示信息,其原因在于 vue.js 文件本身也有一个 productionTip 属性,在加载时,优先生效。

因此在开发环境中如果要关闭提示信息,还需要注意 vue.js 文件中的配置。

silent

silent 属性用于设置是否取消 Vue 日志和警告。

silent 的基本用法:

Vue.config.silent=true|false;

devtools

devtools 属性用于设置是否允许使用 vue-devtools 进行调试。

devtools 的基本用法:

Vue.config.devtools = true | false;

组件进阶

mixins

mixins 是一种分发 Vue 组件中可复用功能的方式。

mixins 的基本用法:

letvm=newVue({el:'#app',// mixins:混入对象mixins:{data(){return{// ...}}},// 组件data优先级 > 混入data优先级data:{// ...},// 组件钩子函数优先级 < 混入钩子函数优先级created(){// ...}})Vue.component('my-component',{template:'',mixins:{// ...}})

虚拟 DOM

在 Vue 2 中,引入了虚拟 DOM(Virtual DOM),虚拟 DOM 是使用 JavaScript 对象来对真实 DOM 进行描述的一种技术。

虚拟 DOM 的主要作用:

  • 提高 DOM 操作的性能:大部分情况下,使用 JavaScript 去操作跨线程的庞大 DOM 需要较高的性能,而虚拟 DOM 可以降低这一成本。
  • 实现服务器端渲染(SSR)和跨端使用:虚拟 DOM 可以用于 SSR 以及跨端使用。

虚拟 DOM 的表达方式就是把每一个标签都转为一个对象,其基本形式为:

{'标签',props:{// 标签上的属性和方法},children:[// 标签的内容或者子节点]}

示例:虚拟 DOM

在 Vue 中,有一个 template 模板:

<template><divid="box"class="container"><h1>Hello,Vue</h1></div></template>

该模板用虚拟 DOM 表示为:

{'div',props:{id:'box',class:'container'},children:[{tag:'h1',children:'Hello,Vue'}]}

render + createElement

在 Vue 中可以使用 render 函数实现对虚拟 DOM 的操作,在 render 函数的返回值中,需要调用 createElement 函数来创建元素。

createElement 函数返回的并不是一个实际的 DOM 元素,它返回的其实是一个描述节点,用来告诉 Vue 在页面上需要渲染什么样的节点,描述节点称为虚拟节点(Virtual Node,VNode)。


示例:render + createElement

入口页面(index.html):

<divid="app"><my-component></my-component></div><script>Vue.component('my-component',{render(createElement){returncreateElement('p',{style:{color:'aqua'}},'成功渲染')}})letvm=newVue({el:'#app',})</script>

示例效果:


diff 算法

diff 算法(在 Vue 中称之为 patch)是一种针对两颗虚拟 DOM 进行对比,查找其中的差异,然后根据差异性来更新页面的算法,其核心参考了 Snabbdom 原理。

diff 算法的特性:深度优先,同层级比较。

  • 只比较同一层级的标签,不跨级比较。
  • 如果同一层级的比较标签名不同,就直接移除老的虚拟 DOM 对应的节点,不继续按这个树状结构做深度比较。
  • 如果标签名相同,绑定的 key 属性的值也相同,就会认为是相同节点,也不继续按这个树状结构做深度比较。故在使用 v-for 遍历列表时,需要绑定一个 key 属性以提高遍历效率。

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

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

相关文章

红队工具箱:进攻性安全运营的必备工具与技术

免责声明&#xff1a; 本文仅用于教育目的。未经授权利用系统是非法行为&#xff0c;将受到法律制裁。保持道德。遵守法律。安全负责。 感谢各位阅读。享受愉快的道德黑客之旅&#xff01;如果喜欢我的工作&#xff0c;请支持我&#xff01; &#x1f525; 红队介绍 红队演…

AMAT 0270-20268

该部件是Applied Materials&#xff08;应用材料公司&#xff09;的备件编号&#xff0c;用于半导体制造设备中的PCII&#xff08;可能是某种工艺腔室&#xff09;钟罩&#xff08;Bell Jar&#xff09;的喷砂&#xff08;Bead Blast&#xff09;夹具。以下是相关信息和可能的用…

如何判断B2B平台开发服务商的技术硬实力?

在产业数字化转型加速推进的当下&#xff0c;B2B电商平台已从简单的信息撮合工具&#xff0c;升级为整合供应链全链路资源的核心基础设施。对于企业而言&#xff0c;选择一家技术硬实力过硬的B2B平台开发服务商&#xff0c;直接决定了平台的稳定性、扩展性与长期运营价值。然而…

学霸同款2026 TOP10 AI论文写作软件:自考毕业论文全攻略

学霸同款2026 TOP10 AI论文写作软件&#xff1a;自考毕业论文全攻略 2026年自考论文写作工具测评&#xff1a;为何需要一份精准榜单&#xff1f; 随着AI技术的不断进步&#xff0c;越来越多的自考学生开始借助AI写作工具提升毕业论文的完成效率。然而&#xff0c;市面上的工具…

【AI避坑指南】pdfQA基准:表格成“拦路虎“,GPT-120B也栽跟头,大模型开发必看!

论文信息&#xff1a;pdfQA: Diverse, Challenging, and Realistic Question Answering over PDFs, Published on arXiv on 5 Jan 2026, by University of Zurich & ETH Zurich ⚡ TL;DR: 现有的 RAG 评测太“干净”了&#xff01;这篇论文推出了 pdfQA——一个包含 4K 高难…

XSS 攻击(详细) 攻击类型、攻击技巧、攻击工具与平台、防御方法

目录 引言 一、XSS 攻击简介 二、XSS 攻击类型 1.反射型 XSS 2.存储型 XSS 3.基于 DOM 的 XSS 4.Self - XSS 三、XSS 攻击技巧 1.基本变形 2.事件处理程序 3.JS 伪协议 4.编码绕过 5.绕过长度限制 6.使用标签 四、XSS 攻击工具与平台 1.XSS 攻击平台 2.BEEF …

那些让你头疼的外部群推送难题,真相其实是这样的

QiWe开放平台 个人名片 API驱动企微自动化&#xff0c;让开发更高效 核心能力&#xff1a;为开发者提供标准化接口、快速集成工具&#xff0c;助力产品高效拓展功能场景 官方站点&#xff1a;https://www.qiweapi.com 团队定位&#xff1a;专注企微API生态的技术服务团队 对接…

学术论文辅助工具盘点:8款顶尖AI翻译与润色软件评测

&#xfffd;&#xfffd; 8款英文论文AI写作工具核心对比 工具名称 核心功能 处理速度 适合场景 独特优势 aibiye 降AIGC率查重 20分钟 学术论文优化 适配知网/维普检测规则 aicheck AIGC检测降重 20分钟 AI生成内容处理 双重检测降重一体化 askpaper 学术风格…

超重力床在环保领域的具体应用

超重力床(又称旋转填充床)是基于超重力场强化传质原理的新型设备,通过高速旋转产生数十至数百倍重力加速度,使气液两相在填料内形成巨大相界面,大幅提升传质效率,相比传统塔器体积缩小90%以上。其在环保领域的应…

企微API外部群自动化:快速建立自己的护城河

QiWe开放平台 个人名片 API驱动企微自动化&#xff0c;让开发更高效 核心能力&#xff1a;为开发者提供标准化接口、快速集成工具&#xff0c;助力产品高效拓展功能场景 官方站点&#xff1a;https://www.qiweapi.com 团队定位&#xff1a;专注企微API生态的技术服务团队 对接…

智能论文写作辅助:八大翻译优化与语言增强工具评测

&#xfffd;&#xfffd; 8款英文论文AI写作工具核心对比 工具名称 核心功能 处理速度 适合场景 独特优势 aibiye 降AIGC率查重 20分钟 学术论文优化 适配知网/维普检测规则 aicheck AIGC检测降重 20分钟 AI生成内容处理 双重检测降重一体化 askpaper 学术风格…

网络安全 | 深入解析XSS攻击与防御实战

网络安全 | 深入解析XSS攻击与防御实战 XSS攻击概述 跨站脚本攻击(Cross-Site Scripting&#xff0c;简称XSS)是一种常见的Web安全漏洞&#xff0c;它允许攻击者将恶意客户端脚本注入到其他用户浏览的网页中。XSS攻击的危害等级通常被OWASP评为高风险漏洞&#xff0c;攻击者可…

2026年高性价比的钢琴搬运企业,安徽好为民搬家公司实力如何?

2026年消费升级持续深化,钢琴作为承载家庭情感与艺术价值的精密乐器,其专业搬运需求已成为中搬家服务的核心细分赛道。无论是老小区无电梯的立式钢琴搬运、跨城长途的三角钢琴运输,还是古董钢琴的精细防护,优质服务…

大模型开发|RAG系统的“翻译官“上线!问题泛化技术,让AI问答不再“鸡同鸭讲“!

一、在做知识库RAG场景中&#xff0c;问题泛化有什么作用&#xff1f; 在构建基于知识库的问答系统时&#xff0c;很多人把注意力集中在大模型、向量数据库或者检索算法上。但其实&#xff0c;在用户提问和系统响应之间&#xff0c;还有一个看似不起眼却至关重要的环节——问题…

高效学术写作:8种基于AI的翻译与文本润色工具对比

&#xfffd;&#xfffd; 8款英文论文AI写作工具核心对比 工具名称 核心功能 处理速度 适合场景 独特优势 aibiye 降AIGC率查重 20分钟 学术论文优化 适配知网/维普检测规则 aicheck AIGC检测降重 20分钟 AI生成内容处理 双重检测降重一体化 askpaper 学术风格…

智能会议系统生产厂哪家靠谱,权威榜单来解答

在数字化会议需求激增的当下,一套稳定、智能、高效的会议系统是企业提升协作效率、塑造专业形象的核心载体。面对市场上琳琅满目的智能会议系统方案商与生产厂,如何找到技术强、服务优、适配性高的合作伙伴?以下结合…

Pytest实践:掌握Python中的高级测试技术

今天继续分享Python中的一些高级测试技术。 1. 简介 使用 pytest 步入高级测试领域&#xff0c;预示着在你成为一名精通 Python 的开发测试人员的旅程中的又一个重要里程碑。从基本 pytest 功能到高级 pytest 功能的过渡就像换挡&#xff1a;它使你能够利用强大的测试策略在错…

后量子加密落地,天翼云PQC筑牢量子时代安全防线

后量子加密落地&#xff0c;天翼云PQC筑牢量子时代安全防线量子计算技术的迅猛发展&#xff0c;正让基于大数分解和离散对数难题的RSA、ECC等传统加密算法陷入“失效危机”。Shor算法可在多项式时间内破解这类经典加密体系&#xff0c;导致现有云服务器通信面临“先窃取、后解密…

2025年AI超级员工品牌排行榜:智能助手谁更胜一筹,AI智能员工/AI企业员工/AI超级员工/AI员工供应商口碑排行

行业背景与榜单说明 随着人工智能技术的快速发展,AI超级员工已成为企业数字化转型的重要推动力。本榜单基于公开市场数据、技术实力、客户反馈及行业影响力等维度,对当前表现突出的AI超级员工品牌进行客观评估,旨在…

2026年国内评价好的不锈钢工业管源头厂家推荐榜单,不锈钢角钢/不锈钢扁钢/不锈钢卷板,不锈钢工业管直销厂家怎么选择

随着工业4.0加速推进,不锈钢工业管作为高端装备制造的核心材料,其质量稳定性、技术适配性及供应链响应效率直接影响项目交付周期与成本。据统计,2025年国内不锈钢工业管市场规模突破800亿元,但行业集中度较低,中小…