vue-组件注册及使用

​🌈个人主页:前端青山
🔥系列专栏:Vue篇
🔖人终将被年少不可得之物困其一生

依旧青山,本期给大家带来vue篇专栏内容-组件注册及使用

目录

1、组件的注册及使用

2、组件常用属性

2.1、directive

2.2、computed

2.3、watch

2.4、filter

2.5、mixin

1、组件的注册及使用

Vue的组件按照类型可以分为:

  • 全局组件:只要注册好,可以在项目中任意.vue文件中使用

  • 局部组件:主要注册好,可以在当前的.vue文件中使用

无论是全局组件还是局部组件,在使用时必须先对组件进行注册

全局组件通常在入口文件main.js中注册,注册语法:

Vue.component("组件名",组件对象)

局部组件根据需要,在需要使用外部组件的那个组件自身中注册,注册分为两部,先导入目标组件,然后再注册,示例如下:

import CompName from "path of Component"
export default {components: {// 标签名: CompName,}
}

当一个组件被注册好后,该组件就可以在对应的范围内被使用,使用时,将组件名以HTML标签语法进行使用即可:

<!-- 例如,某组件名为TabBar,则使用语法如下 -->
<template><TabBar></TabBar>
</template>

由于组件在使用的时候按照标签语法进行使用,因此强烈建议在注册组件时强烈采用大驼峰命名法,以此来避免和html标签重复,例如有组件名Form的组件,在Vue及React中都是允许的,但是form这样的组件名慎用!

2、组件常用属性
2.1、directive

directive,该属性用于自定义指令

除了核心功能默认内置的指令,Vue也允许开发者注册自定义指令。

自定义指令可以分为两种情况:

  • 全局自定义指令【更加实用】

  • 局部自定义指令

当在某个组件内,自身的局部自定义指令与全局自定义指令冲突时,以组件自身的局部自定义指令为准。

指令是帮助我们快速完成某些处理的语法糖,其本质也就是一些拥有固定函数名称的函数集合,这些函数会在特定的时间触发并自动执行,我们称之为钩子函数。指令支持以下钩子函数:

bind,当指令首次与标签元素绑定的时候触发inserted,当标签元素被插入完成后触发(与bind的区别在于是否可以获取父节点)update,当标签元素更新时触发componentUpdated,当组件更新完毕后触发unbind,当指令与标签解绑时触发

在自定义指令时,我们必须要根据业务需要从上面几个钩子函数中选取一个或几个合适的钩子函数,并准备好逻辑代码组成一个JavaScript对象。钩子函数支持俩个形参:

  • el:指令宿主对应的DOM对象

  • binding:指令绑定对象,可以通过该对象获取指令的名称、指令表达式等信息

全局自定义指令的注册,通常也是在入口文件main.js中完成,但指令的处理程序在编写的时候允许模块化,也建议采用模块化来保持入口文件中的代码可读性。

Vue.directive("不带v-的指令名",包含指令处理程序的对象)

局部自定义指令通常注册在对应的组件自身,处理程序自身往往也不需要模块化,可以直接写在组件内,当然如果这个指令也需要在其它组件中使用也是可以模块化的:

export default {directives: {// 不带v-的指令名: 包含指令处理程序的对象,}
}

请注意,在自定义指令的方法中,不能像以前的methods中的方法一样使用关键词this,此时this关键词指向undefined

案例:使用自定义指令实现以下效果

  • 使用全局指令定义自定义的v-color(传参),在元素被插入时设置内容颜色

例如:<div v-color="'red'">文字</div>

此时指令语法如下:

// 指令实则是一堆钩子函数的集合
// 使用全局指令定义自定义的`v-color(传参)`,在元素被插入时设置内容颜色
const obj = {bind (el) {// 获取不到父节点console.log(el.parentNode)},inserted (el, binding) {console.log(el, binding)// 获取父节点console.log(el.parentNode)el.style.color = binding.value}
}
​
export default obj

需要在入口文件main.js中导入并注册指令:

import color from './directives/color'
// 全局指令注册语法:Vue.directive(指令名,指令对象)
Vue.directive('color', color)

在App.vue文件中测试全局指令的使用:

<template><div><!-- 全局指令测试 --><div v-color="color">青山哥哥好帅啊</div><div v-color="'green'">青山哥哥好帅啊</div><div v-color="'blue'">青山哥哥好帅啊</div><div v-color="'pink'">青山哥哥好帅啊</div><div v-color="'orange'">青山哥哥好帅啊</div><div v-color="'grey'">青山哥哥好帅啊</div></div>
</template>
​
<script>
export default {data () {return {color: 'red'}},
}
</script>
​
<style></style>
  • 使用局部自定义指令实现v-mobile(不传参)验证用户输入的是否是合法的手机号,不合法时将输入框背景色设置成pink,边框设置成red;合法时,边框黑色,背景色白色。

2.2、computed

computed,该属性用于定义计算属性

模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。例如:

<div id="example">{{ message.split('').reverse().join('') }}{{ message.split('').reverse().join('') }}{{ message.split('').reverse().join('') }}
</div>

在这个地方,模板不再是简单的声明式逻辑。你必须看一段时间才能意识到,这里是想要显示变量 message 的翻转字符串。当你想要在模板中的多处包含此翻转字符串时,就会更加难以处理。

所以,对于任何复杂逻辑,你都应当使用计算属性

如果我们使用一个计算属性,假定计算属性名字叫resverseMessage,那么我们可以将翻转message的工作交给该属性去完成,那么我们视图部分就可以这么写了:

<div id="example"><!-- 虽然模版简单了,但是针对数据的处理依然需要在计算属性声明的位置去书写,因此代码实际上没有减少。那么问题来了?我们为什么还推广建议使用计算属性呢? -->{{ reserseMessage }}
</div>

计算属性没有全局和局部之分,按照以下语法声明计算属性:

export default {computed: {// 计算属性名 : Function,}
}
计算属性默认只有 getter,不过在需要时你也可以提供一个setter:export default {computed: {// 计算属性名 : { get: Function, set: Function },}
}
  • get:对应的函数在调用该计算属性时被执行

  • set:对应的函数在给该计算属性赋值时被执行,形参为赋的值

计算属性的结果会被缓存,除非依赖的响应式数据变化才会重新计算。注意,如果某个依赖 (比如非响应式 property) 在该实例范畴之外,则计算属性是不会被更新的。

2.3、watch

watch,该属性用于定义监听器/侦听器

使用watch来侦听data中数据的变化,watch中的属性(watch是对象格式)一定是data 中已经存在的数据。(特殊情况除外)

使用场景:数据变化时执行异步或开销比较大的操作

典型应用:在线汉字转拼音

监听器

监听器的语法如下:

export default {watch: {data中数据属性名: 函数名 | 函数 | 对象 | 回调函数数组,}
}
特别需要注意,如果监听的数据是一个对象,则需要使用深度监听语法:export default {watch: {data中对象属性名: {deep: true,handler(val,oldVal){}}}
}

注意,不应该使用箭头函数来定义 watcher 函数

案例:给定三个输入框,第一个为姓输入框,第二个为名输入框,第三个为姓名组合结果框;要求当用户更新姓或名后,第三个输入框自动生成完整的姓名结果。

== 面试题:computed与watch有什么区别?? ==

  • 设计方式上的区别

    • 计算属性:依赖数据的,只要数据不变,它会套用固定的流程去执行。我们写好之后一劳永逸的。

    • 监听器:需要我们自己去写比较复杂的数据处理过程,比如说一些异步的操作、开销大的操作。

  • 响应方式上的区别

    • 计算属性:支持深度深度数据是否变化的监听的

    • 监听器:默认不支持深度响应,仅支持字面量处理,但是其支持通过代码的改动来支持深度监听

2.4、filter

filter,该属性用于定义过滤器

注意:filter仅在Vue2.x中支持,Vue3.x中已废弃,针对后者建议通过computed或methods来替代实现

前端呈现的页面中,不泛很多数据是来自于后端接口请求得到的响应,而有些时候响应给我们的数据格式未必符合我们的要求。例如,如果你做一个功能需要显示一个字符串名单,但是后端给你的名单格式是一个数组,那么此时v-for循环操作不太好操作,而我们需要实现数组字符串的格式转化,这个时候就可以使用过滤器来解决这个问题。

过滤器没有全局和局部之分,哪个组件需要使用则在对应的组件中声明即可,例如:

export default {filters: {过滤器名: Function,}
}

需要注意的是,过滤器对应的函数:

  • 至少有1个形参,形参为待处理的数据(任意格式)

  • 使用过滤器时,如果实参有n个,那么形参应该有n+1个;其中第一形参必定是待处理的数据,而后的形参与实参一一对应(例如:第二个形参对应着第一个实参,第三个形参对应着第二个实参....)

  • 必须有返回值

定义好过滤器后,过滤器就可以与插值表达式一起在视图结构中使用了:

{{表达式 | 过滤器名}}

过滤器可以传递实参:

{{表达式 | 过滤器名(实参1,实参2,...)}}

当然过滤器也可以被连续调用:

{{表达式 | 过滤器名1 | 过滤器名2 | ...}}

理论上来说,只要一个过滤器的表达式有输出,后面就可以继续调用,无长度限制。

案例:给定以下数组,请使用过滤器将其处理成目标显示效果,为了考虑兼容,如果插值没有数据,请返回固定语句进行提示

const actors = [{id: 11, name: "张三"},{id: 22, name: "李四"},{id: 33, name: "王麻子"},{id: 44, name: "青山哥哥"}
]

如果有数据则显示如下:

本剧主演:张三 李四 王麻子 青山哥哥

如果没有数据则显示如下:

本剧主演:暂无
2.5、mixin

mixin,该属性用于定义混入

mixin是Vue中非常实用的一个功能,它能够实现一些代码片段的复用,它可以将一个混入对象(js普通对象)中的Vue选项混入到被混入的Vue组件中去。混入操作按照类型可以分为:

  • 全局混入,全局混入也可以称之为叫强制混入

  • 局部混入,局部混入也可以称之为叫按需混入

全局混入会将混入对象的选项混入到所有的Vue组件中去,除非项目中每个组件都需要这些Vue选项,否则该操作方式慎用,因为其可能导致其它组件运行不正常。

定义混入对象,混入对象与常规的Vue选项对象的声明基本一致,假设混入对象名称为obj,则:

// 将要复用的选项放到混入对象中去
const obj = {methods: {}data(){return {}},filters: {},computed: {},// ....
}

它不一定需要所有的Vue选项,需要什么根据复用的需求而定,需要复用什么选项写入进去即可。但是由于工程化下整个项目共用一个Vue的el选项,因此混入对象中一般不会有el选项。

全局混入语法:

Vue.mixin(混入对象)

局部混入语法:

export default {mixins: [混入对象1,混入对象2,....]
}

在一个混入对象被混入到一个组件的时候,混入对象中的选项可能与组件自身的选项存在冲突的情况,例如混入对象中的data中有一个msg属性,而组件自身的data中也有msg属性,在这种情况下,混入操作会按照固定的合并策略进行冲突合并:

  • 如果冲突发生在data中,则以组件自身的data数据为准

  • 如果是对象属性发生冲突(如methods、computed、filters等)则会合并成一个对象属性,如对象属性中的属性存在同名则以组件自身的为准

  • 如果是钩子函数出现同名冲突,则混入对象中的钩子函数会与本组件自身的钩子函数合并成数组,所有钩子函数均会被执行,但同周期的钩子函数在执行的时候混入对象中的钩子函数会优先于本组件的钩子函数执行

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

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

相关文章

ssh开启,centOS7

1、先确定虚拟机是否装了openssh-server&#xff0c;执行 yum list installed |grep openssh-server 查看是否安装 [rootlocalhost ~]# yum list installed |grep openssh-server Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast openssh-serve…

算法通关村第十五关白银挑战——海量数据场景下的热门算法题

大家好&#xff0c;我是怒码少年小码。 最近超级忙&#xff0c;很多实验报告&#xff0c;已经四五天没搞了&#xff0c;但是我还是回来了&#xff01; 海量数据场景下的热门算法题 本篇的题目不要求写代码&#xff0c;面试的时候能很清楚的说出思路就可以了。 1. 从40个亿中…

RESTful API概述以及如何使用它构建 web 应用程序

REST&#xff08;Representational State Transfer&#xff09;是一种设计风格和架构原则&#xff0c;它是一种为 Web 应用程序提供简化和标准化的 API 的方式。RESTful API&#xff08;RESTful Web Services&#xff09;是符合 REST 架构风格的网络应用程序 API&#xff0c;它…

如何解决Windows电脑 Create folder error,Access is denied.

如何解决 Create folder error, Error: mkdir C:\Program Files\nodejs\21.1.0/: Access is denied. Waring: Name : http://npm.taobao.org/mirrors/node/v21.1.0/win-x64/node.exe Code : -2 Error : Create folder error, Error: mkdir C:\Program Files\nodejs\\21.1.0/…

【文末送书】如何在时间循环里最优决策?

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

OpenAI调查ChatGPT故障;向量搜索的优势与局限

&#x1f989; AI新闻 &#x1f680; OpenAI调查ChatGPT故障&#xff0c;发布新AI产品GPTs和GPT-4 Turbo 摘要&#xff1a;OpenAI的ChatGPT和其他服务出现故障&#xff0c;经过调查后发现是由于DDoS攻击导致的异常流量模式。OpenAI在首届开发者大会上发布了新的AI产品GPTs&am…

CSS3 2D、3D转换

一、CSS3 2D转换&#xff1a; CSS3转换可以对元素进行移动、缩放、转动、拉长或拉伸。 2D变换的方法&#xff1a;translate()、rolate()、scale()、skew()、matrix()。 <style> div { width:200px; height:100px; background-color:red; /* Rotate div */ tran…

酷柚易汛ERP - 发货地址管理操作指南

1、应用场景 对发货地址进行管理&#xff0c;使用【物流服务】时的自动获取发货地址。 2、主要操作 打开【资料】-【发货地址管理】新增发货地址。 可以对进行地址设置及管理&#xff0c;点击【新增】可添加新的发货地址信息地址简称方便使用者在选择发货地址时&#xff0c;…

Lambertian模型(完美漫反射)

这里使用相乘的方式组合光照色和纹理色。根据这个模型,面朝光源的区域光照强度高,纹理色也相应增强。面背光源的区域光照弱,纹理色也被抑制。这样通过光照和纹理的结合,可以合成出具有照明效果的面部颜色,而不仅仅是固定的纹理本身的颜色。相乘方式可以近似实现不同光照方向下面…

成都优优聚美团代运营:打造高效电商运营的利器

一、引人注目的标题 在繁杂的电商市场中&#xff0c;成都优优聚美团代运营以其专业的服务&#xff0c;为商家提供了一站式的解决方案。那么&#xff0c;这个备受瞩目的代运营平台有何特别之处呢&#xff1f;今天&#xff0c;我们就来一探究竟。 二、平台背景与优势 成都优优聚…

JL-03小型气象站气象环境在线监测设备自动上传并保存数据

JL-03小型气象站产品概述 小型气象站用于对风速、风向、雨量、空气温度、空气湿度、太阳辐射、光照强度、土壤温度、土壤湿度、蒸发量、大气压力等气象要素进行现场监测。既可以通过无线通讯将数据传送至云平台&#xff0c;又可以通过配套的数据采集通讯线与计算机进行连接&am…

1. 深度学习——激活函数

机器学习面试题汇总与解析——激活函数 本章讲解知识点 什么是激活函数&#xff1f; 为什么要使用激活函数&#xff1f; 详细讲解激活函数 本专栏适合于Python已经入门的学生或人士&#xff0c;有一定的编程基础。本专栏适合于算法工程师、机器学习、图像处理求职的学生或人…

一分钟秒懂人工智能对齐

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Javaweb之javascript的小案例的详细解析

1.5.4 案例 1.5.4.1 需求说明 鲁迅说的好&#xff0c;光说不练假把式,光练不说傻把式。所以接下来我们需要通过案例来加强对于上述DOM知识的掌握。需求如下3个&#xff1a; 点亮灯泡 将所有的div标签的标签体内容后面加上&#xff1a;very good 使所有的复选框呈现被选中的…

AI毕业设计生成器(基于AI大模型技术开发)

这是一个辅助生成计算机毕业设计的工具&#xff0c;可以自动完成毕业设计的源码。它基于几百个github上面开源的java和python项目&#xff0c;运用tengsorflow技术&#xff0c;训练出了AI大模型。基本实现了计算机毕业设计生成器&#xff0c;能够初步生成Java或python基本源码。…

钉钉API与集简云无代码开发连接:电商平台与营销系统的自动化集成

连接科技与能源&#xff1a;钉钉API与集简云的一次集成尝试 在数字化时代&#xff0c;许多公司面临着如何将传统的工作方式转变为更智能、高效的挑战。某能源科技有限公司也不例外&#xff0c;他们是一家专注于能源科技领域的公司&#xff0c;产品包括节能灯具、光伏逆变器、电…

前端面试题之vue篇

vue基础 vue的基本原理 当一个Vue实例创建时&#xff0c;Vue会遍历data中的属性&#xff0c;用Object.defineProperty(Vue使用proxy)转换为getter/setter&#xff0c;并且在内部追踪相关依赖&#xff0c;在属性被访问和修改时通知变化。每个组件实例都有相应的watcher程序实例…

BM65 最长公共子序列(二)

动态规划 BM65 最长公共子序列&#xff08;二&#xff09; 这道题是动态规划的典型例题。 思路 题目要求获取最长公共子序列&#xff0c;我们要先求最长公共子序列的长度&#xff0c;然后根据这个长度倒推从而获取这个子序列。注意&#xff1a;子序列不是子串&#xff0c;子…

uni-app——項目day01

配置uni-app開發環境 uni-app快速上手 | uni-app官网 创建项目 图中四个划线就是要配置的地方. 选择vue2还是vue3看个人选择。 目录结构 但是现在新版本创建的项目已经没有components目录了&#xff0c;需要自己创建。 项目运行到微信开发者工具 使用git管理项目 node-mod…

Unity 使用INI文件存储数据或配置参数预设

法1&#xff1a;调用外部Capi库 具体使用&#xff1a; public class Ini{//读取INI文件需要调用C的APP[System.Runtime.InteropServices.DllImport("kernel32")]private static extern long WritePrivateProfileString(string section, string key, string val, st…