🖥️ Vue.js专栏:Vue.js 高级语法系列
🧑💼 个人简介:一个不甘平庸的平凡人🍬✨ 个人主页:CoderHing的个人主页
🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️
👉 你的一键三连是我更新的最大动力❤️
目录
在Vue的模板语法中 我们学了很多指令 除了这些指令 Vue也允许我们自己定义自己的指令
注:在Vue中,代码的复用和抽象 主要还是通过组件;
通常在某些情况下,你需要对DOM元素进行底层操作,这个时候就会用到 自定义指令
自定义指令分为两种:
自定义局部指令: 组件中通过 directives选项 只能在当前组件中使用
自定义全局指令: app的 directive方法 可以在任意组件中使用
当我们来做一个非常简单的案例:当某个元素挂载完成后可以自动获取焦点
实现方式一:使用默认的实现方式
| JavaScript |
实现方式二:自定义一个 v-focus的局部指令;
这个自定义指令非常简单,我们只需要在组件选项中使用directives即可
它是一个对象,在对象中编写我们的自定义指令的名称(这里不需要加v-)
自定义指令有一个生命周期,是在组件挂载后调用的mounted 我们可以在其中完成操作
| JavaScript |
实现方式三:自定义一个 v-focus的全局指令
| JavaScript |
指令定义的对象,Vue提供了以下的钩子函数:
Created: 绑定的元素attribute 或事件监听器被应用之前调用
beforeMount: 当指令第一次绑定到元素并且在挂载父组件之前调用
Mounted: 在绑定元素的父组件被挂载后调用
beforeUpdate:在更新包含组件的VNode之前调用
Updated: 包含组件的VNode及其子组件的VNode更新后调用
beforeUnmount:在卸载绑定元素的父组件前调用
unmounted:当指令与元素解绑且父组件已卸载时,只调用一次
如果我们指令 需要接受一些参数或修饰符 呢?
james是参数的名称 abc,cba是修饰符的名称 后面是传入的值
在我们的生命周期中,可以通过 bindings获取到对应的内容:
| JavaScript |
在组件化开发中,封装一个组件A 在另外一个组件B中使用:
那么 组件A中的template元素,会被挂载到组件B中template的某个位置;
最终 应用程序会形成一颗 DOM树结构
但在一些情况下,希望 组件不是挂载在这个组件树上的,可能是移动到Vue app之外的其他位置:
如:移动到body元素上.或者我们有 其他的div#app之外的元素上,
这个时候我们就可以通过teleport来完成;
Teleport是什么?
他是一个 Vue提供的内置组件 类似于react的Portals
teleport翻译过来是 心灵传输,远距离运输的意思
它有两个属性:
To: 指定将其中的内容移动到目标元素,可以使用选择器
disabled:是否禁用teleport的功能

teleport也可以和组件结合一起来使用:
当我们在teleport中使用组件,并且也可以给他传入一些数据
如果我们将 多个teleport应用到 同一个目标上(to的值相同) 那么这些 目标会进行合并
注:目前(2022年10月9日)Suspense显示的是一个实验性的特性,API随时可能会修改
Suspense是一个内置的全局组件,该组件有两个插槽:
default:如果default可以显示,那么显示default的内容
fallback:如果default无法显示,那么就会显示fallback插槽的内容;
(一般用于异步组件)
通常我们向Vue全局添加一些功能时 会采用插件的模式,它有两种编写模式:
对象类型:一个对象 必须包含一个install的函数,该函数会在安装插件时执行
函数类型:一个function 这个函数会在 安装插件时 自动执行
| JavaScript |
| JavaScript |
插件可以完成的功能没有限制,如下面几种都可以:
添加全局方法 或 property 通过把它们添加到config.globalProperties上实现
添加全局资源:指令/过滤器/过渡 等
通过 全局mixin 来添加一些组件选项
一个库,提供自己的API 同时 提供上面提到的一个或多个功能
对象类型的写法
| JavaScript |
函数类型的写法
| JavaScript |
Vue推荐在大多数情况下使用模版来创建你的HTML 然后一些特殊的场景,你真的需要Js的完全编程能力,这个时候你可以使用 渲染函数 它比 模版更接近编译器
Vue在生成真实DOM之前 会将我们的节点转换成VNode,而VNode组合在一起形成一颗树结构,就是 虚拟DOM(VDOM)
事实上,之前编写的template中的HTML 最终也是 使用渲染函数 生成 对应的VNode
那么 如果你想充分利用Js的编程能力,可以自己来写createVNode函数,生成对应的VNode
使用h()函数:
h()函数 是一个用于 创建vnode的一个函数;
其实更准确的命名是createVNode()函数,但是为了简便在Vue将之 简化为 h()函数
h()函数 如何使用? => 他接受三个参数:
| JavaScript |
| JavaScript |
| JavaScript |
图解(一)
注意事项:
如果 没有props 那么通常可以 将children作为第二个参数传入;
如果产生歧义,可以将 null作为第二个参数传入,将children作为第三个参数传入
h函数可以在两个地方使用:
render函数选项中;
setup函数选项中(setup本身需要是一个函数类型,函数再返回h函数创建的新VNode)
| JavaScript |
| JavaScript |
如果我们希望在项目中使用jsx,需要添加对jsx的支持;
jsx通常会通过Babel来进行转换(React编写的jsx就是通过babel转换的)
对于Vue来说,我们只需要在Babel中配置对应的插件即可
安装Babel支持Vue的jsx插件:
| JavaScript |
在 babel.config.js配置文件 中配置插件:
| JavaScript |
如果是Vite环境,需要安装插件:
| JavaScript |
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He
这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
在Ruby类中,我重写了三个方法,并且在每个方法中,我基本上做同样的事情:classExampleClassdefconfirmation_required?is_allowed&&superenddefpostpone_email_change?is_allowed&&superenddefreconfirmation_required?is_allowed&&superendend有更简洁的语法吗?如何缩短代码? 最佳答案 如何使用别名?classExampleClassdefconfirmation_required?is_a
可能已经问过了,但我找不到它。这里有2个常见的情况(对我来说,在编程Rails时......)用ruby编写是令人沮丧的:"astring".match(/abc(.+)abc/)[1]在这种情况下,我得到一个错误,因为字符串不匹配,因此在nil上调用[]运算符。我想找到的是比以下内容更好的替代方法:temp="astring".match(/abc(.+)abc/);temp.nil??nil:temp[1]简而言之,如果不匹配,则简单地返回nil而不会出错第二种情况是这样的:var=something.very.long.and.tedious.to.writevar=some
我正在学习Ruby的基础知识(刚刚开始),我遇到了Hash.[]method.它被引入a=["foo",1,"bar",2]=>["foo",1,"bar",2]Hash[*a]=>{"foo"=>1,"bar"=>2}稍加思索,我发现Hash[*a]等同于Hash.[](*a)或Hash.[]*一个。我的问题是为什么会这样。是什么让您将*a放在方括号内,是否有某种规则可以在何时何地使用“it”?编辑:我的措辞似乎造成了一些困惑。我不是在问数组扩展。我明白了。我的问题基本上是:如果[]是方法名称,为什么可以将参数放在括号内?这看起来几乎——但不完全是——就像说如果你有一个方法Foo.d
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于