uniapp组件定义

自定义组件

新建在/components/组件名.vue文件
组件文档结构

<template><view>......</view>
</template>
<script>export default {name: "组件名称",//属性自定义props: {属性名称: {type: String, //属性类型value: "值"},......},//组件生命周期created: function(e) {},methods: {函数名称: function(obj) {},}}
</script>
<style>组件样式
</style>

使用组件

1、引用组件
import 组件名称 from "../../components/组件名.vue";
2、注册组件
export default{components:{组件名称},
}
3、在试图模板中使用组件
<组件名称 组件属性="对应的值"></组件名称>

全局注册

vue一样的方式去配置全局组件,需在main.js里进行全局注册,注册后就可在所有页面里使用该组件。
1、main.js里进行全局导入和注册

import Vue from 'vue'
import pageCafe from './components/page-cafe.vue'
Vue.component('page-cafe',pageCafe)

2、index.vue里可直接使用组件

<template><view><page-cafe></page-cafe></view>
</template>

局部注册

1、传统vue规范:在index.vue页面中,通过import方式引入组件 ,在components选项中定义你想要使用的组件。

<!-- 在index.vue引入 uni-badge 组件-->
<template><view><uni-badge text="1"></uni-badge></view>
</template>
<script>import uniBadge from '@/components/uni-badge/uni-badge.vue';export default {components: {uniBadge}}
</script>

对于components对象中的每个property来说,其property名就是自定义元素的名字,其property值就是这个组件的选项对象。
在对象中放一个类似uniBadge的变量名其实是缩写,即这个变量名同时是:

  • 用在模板中的自定义元素的名称
  • 包含了这个组件选项的变量名(仅支持驼峰法命名)

2、通过uni-appeasycom将组件引入精简为一步。只要组件安装在项目的components目录下,并符合components/组件名称/组件名称.vue目录结构。就可以不用引用、注册,直接在页面中使用。

<template><view><uni-badge text="1"></uni-badge></view>
</template>
<script>// 这里不用import引入,也不需要在components内注册uni-badge组件。template里就可以直接用export default {data() {return {}}}
</script>
  • easycom是自动开启的,不需要手动开启,有需求时可以在pages.json的easycom节点进行个性化设置
  • 不管components目录下安装了多少组件,easycom打包后会自动剔除没有使用的组件,对组件库的使用尤为友好

props

props可以是数组或对象,用于接收来自父组件的数据。props可以是简单的数组,或者使用对象作为替代,对象允许配置高级选项,如类型检测、自定义验证和设置默认值。

选项类型说明
typeString、Number、Boolean、Array、Object、Date、Function、Symbol,任何自定义构造函数、或上述内容组成的数组会检查一个 prop 是否是给定的类型,否则抛出警告
defaultany为该 prop 指定一个默认值。如果该 prop 没有被传入,则换做用这个值。对象或数组的默认值必须从一个工厂函数返回
requiredBoolean定义该 prop 是否是必填项
validatorFunction自定义验证函数会将该 prop 的值作为唯一的参数代入。在非生产环境下,如果该函数返回一个 false 的值 (也就是验证失败),一个控制台警告将会被抛出

示例:子组件定义

<template><view><view>{{age}}</view></view>
</template>
<script>export default {props: {// 检测类型 + 其他验证age: {type: Number,default: 0,required: true,validator: function(value) {return value >= 0}}}}
</script>

示例:父组件传递age属性

<template>
<view><componentA :age="10"></componentA>
</view>
</template>

组件之间的数据传输

组件之间的数据传输,以及事件传递是比较常见的一个应用

事件注册/触发方式

客户端调用组件的时候,注册事件。组件触发注册的事件,达到向父组件传值的目的

子组件free-cafe.vue

<template><!-- <button type="default" @tap="$emit('openExtend')">{{title}}</button> --><button type="default" @tap="handleJs">{{title}}</button>
</template><script>export default {name: "freeCa",props: {title: String,default: ''},methods: {handleJs() {this.$emit('openExtend', { name: 'cafe', 'sex': '男' })}}}
</script>

父组件调用时注册事件

<template><view><free-cafe :title="title" @openExtend="openExtend"></free-caafe></view>
</template>
<script>import freeCafe from '../../components/free-cafe.vue'export default {components: {freeCafe},data() {return {title: 'haha'}},methods: {openExtend(obj) {console.log(obj)}}}
</script>

客户端调用组建引用方式

客户端为调用的组件设置引用别名,就可以调用其方法进行传值

子组件free-cafe.vue

<template><button type="default">{{title}}</button>
</template><script>export default {name: "freeTs",props: {title: String,default: ''},methods: {seeme(obj) {console.log(obj)}}}
</script>

父组件为组建设置引用别名,就可以调用其方法进行传值

<template><view><free-cafe :title="title" ref="free"></free-test><button type="default" @tap="seeData">test</button></view>
</template>
<script>import freeCafe from '../../components/free-cafe.vue'export default {components: {freeCafe},data() {return {title: 'haha'}},methods: {seeData() {this.$refs.free.seeme({ title: '6666', created_at: '2020-09-19' });}}}
</script>

ref

被用来给元素或子组件注册引用信息,引用信息将会注册在父组件的$refs对象上。
如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子组件上,引用就指向组件实例:

<!--H5端不支持通过this.$refs.content来获取view实例 -->
<view ref="content">hello</view><!-- 支持通过this.$refs.child来获取child-component实例 -->
<child-component ref="child"></child-component>

尽管存在prop和事件,有的时候你仍可能需要在JavaScript里直接访问一个子组件。访问子组件实例或子元素,通过ref为子组件赋予一个ID引用,在vue的js中可通过this.$refs.XXX来获取到组件对象。

<base-input ref="usernameInput"></base-input>

你已经定义了这个ref的组件里,你可以使用this.$refs.usernameInput来访问这个实例

<!-- base-input子组件页面 -->
<template><view><input :focus="isFocus" type="text" placeholder="请输入内容" /></view>
</template>
<script>export default {name: "base-input",data() {return {"isFocus": false};},methods: {focus() {this.isFocus = true}}}
</script>

允许父级组件通过下面的代码聚焦里的输入框

<!-- index 父组件页面 -->
<template><view><base-input ref="usernameInput"></base-input><button type="default" @click="getFocus">获取焦点</button></view>
</template>
<script>export default {methods: {getFocus() {// 通过组件定义的ref调用focus方法this.$refs.usernameInput.focus()}}}
</script>

注意

非H5端只能用于获取自定义组件,不能用于获取内置组件实例(如:view、text)

自定义事件

你可能有很多次想要在一个组件的根元素上直接监听一个原生事件。 这时,你可以使用 @ 事件的.native修饰符

  • 注意:在app、小程序端和h5端表现不一致,h5端获取到的是浏览器原生事件。
<template><view><!-- 我是父组件 --><componentA @click.native="clickComponentA" style="height: 200px;"></componentA></view>
</template>
<script>export default {methods: {clickComponentA() {console.log("clickComponentA");}}}
</script>
<template><view><!-- 我是子组件 --><view type="default" @click.stop="open" style="height: 30px;">点击</view></view>
</template>
<script>export default {methods: {open() {console.log("open");}}}
</script>

.sync 修饰符

当一个子组件改变了一个prop的值时,这个变化也会同步到父组件中所绑定。.sync它会被扩展为一个自动更新父组件属性的v-on监听器。

<!-- 父组件 -->
<template><view><syncA :title.sync="title"></syncA></view>
</template>
<script>export default {data() {return {title: "hello vue.js"}}}
</script>
<!-- 子组件 -->
<template><view><view @click="changeTitle">{{title}}</view></view>
</template>
<script>export default {props: {title: {default: "hello"},},methods: {changeTitle() {// 触发一个更新事件this.$emit('update:title', "cafe-app")}}}
</script>

命名限制

uni-app中以下这些作为保留关键字,不可作为组件名。
a、canvas、cell、content、countdown、datepicker、div、element、embed、header、image、img、indicator、input、link、list、loading-indicator、loading、marquee、meta、refresh、richtext、script、scrollable、scroller、select、slider-neighbor、slider、slot、span、spinner、style、svg、switch、tabbar、tabheader、template、text、textarea、timepicker、transition-group、transition、video、view、web

注意
除以上列表中的名称外,标准的 HTML 及 SVG 标签名也不能作为组件名。
在百度小程序中使用时,不要在 data 内使用 hidden ,可能会导致渲染错误。
methods中不可使用与生命周期同名的方法名。

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

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

相关文章

SQL Server 配置远程连接

Windows 安装好 SQL Server 的 SSMS,打开SSMS配置远程连接 找到 配置管理器 启用 TCP/IP 打开防火墙设置 新建入站规则 端口TCP - 特定本地端口 (1433)允许连接下一步名称完成 重启 SQL Server 服务

ubuntu安装node

1 下载 node 官网下载 如果需要其他版本&#xff0c;点击上图的Other Downloads 这里下载的版本是20.11.0 Linux Binaries (x64)&#xff0c;下载下来后是node-v20.11.0-linux-x64.tar.xz这样的格式&#xff0c;直接右键解压得到如下目录&#xff1a; 直接拷贝该文件夹到指定目…

高精度恒流/恒压(CC/CV)原边反馈功率转换器

一、产品概述 PR6214是一款应用于小功率AC/DC充电器和电源适配器的高性能离线式功率开关转换器。PR6214采用PFM工作模式&#xff0c;使用原边反馈架构&#xff0c;无需次级反馈电路&#xff0c;因此省去了光耦和431&#xff0c;应用电路简单&#xff0c;降低了系统的成本和体积…

线程池相关参数配置介绍

最近几天在测境碰到一个问题&#xff0c;httpclient 在使用线程池时, 间隔性的出现 NoHttpResponseException 异常。 ​​​​​​​httpclient org.apache.http.NoHttpResponseException: host:443 failed to respond 用了连接池很多年了, 一搜自己的博客, 竟然没做过一次整…

面试宝典之JVM优化

J01、类加载的几个过程&#xff1f; 加载、验证、准备、解析、初始化。然后是使用和卸载了 J02、Minor GC 与 Full GC 分别在什么时候发生&#xff1f; 新生代内存不够用时候发生 MGC 也叫 YGC&#xff0c;JVM 内存不够的时候发生 FGC J03、java 中垃圾收集的方法有哪些? …

史诗级长文--朴素贝叶斯

引言 朴素贝叶斯算法是有监督的学习算法&#xff0c;解决的是分类问题&#xff0c;如客户是否流失、是否值得投资、信用等级评定等多分类问题。该算法的优点在于简单易懂、学习效率高、在某些领域的分类问题中能够与决策树、神经网络相媲美。但由于该算法以自变量之间的独立&am…

质量小议37 -- 架构

架构&#xff1f;架构师&#xff1f; 听的很多&#xff0c;也见过很多所谓的架构、架构师&#xff0c;其实多数都只是软件设计师。 那什么是架构、什么是架构师&#xff1f;估计很长时间自己仍不会完全理解、也不会完全明白。 但不影响再把一些基本概念拿出来再看一…

文字转语音在线合成系统源码 附带完整的安装部署教程

现如今&#xff0c;文字转语音&#xff08;TTS&#xff09;技术逐渐成为人们获取信息的重要手段之一。然而&#xff0c;市面上的TTS工具大多需要下载安装&#xff0c;且功能较为单一&#xff0c;无法满足用户多样化的需求。因此&#xff0c;开发一款功能强大、易于部署的文字转…

分治法-快速排序

基本思路 通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据都比另外一部分的所有数据都要小&#xff0c;然后再按此方法对这两部分数据分别进行快速排序&#xff0c;整个排序过程可以递归进行&#xff0c;以此达到整个数据变成有序序列。 缺点&…

暄桐写字计划 | 开始布局我们的2024

暄桐是一间传统美学教育教室&#xff0c;创办于2011年&#xff0c;林曦是创办人和授课老师&#xff0c;教授以书法为主的传统文化和技艺&#xff0c;皆在以书法为起点&#xff0c;亲近中国传统之美&#xff0c;以实践和所得&#xff0c;滋养当下生活。      暄桐林曦老师有…

C++11 左右值引用、移动语义

右值引用和移动语义 什么是左值&#xff1f;什么是左值引用&#xff1f; 左值是一个表示数据的表达式(如变量名或解引用的指针)&#xff0c;我们可以获取它的地址可以对它赋值&#xff0c;左值可以出现赋值符号的左边&#xff0c;右值不能出现在赋值符号左边。定义时const修饰…

智汇云舟副总裁陈虹旭受邀出席2024昆山工业元宇宙创新论坛

近日&#xff0c;由昆山市工业和信息化局、昆山经济技术开发区科技局指导&#xff0c;中国电子商会元宇宙专委会主办的2024昆山工业元宇宙创新论坛圆满举行。来自西北工业大学、中国电信股份有限公司昆山分公司、中国电信天翼云公司等单位的一百余位专家和企业领导齐聚一堂&…

【Golang】IEEE754标准二进制字符串转为浮点类型

IEEE754介绍 IEEE 754是一种标准&#xff0c;用于表示和执行浮点数运算的方法。在这个标准中&#xff0c;单精度浮点数使用32位二进制表示&#xff0c;分为三个部分&#xff1a;符号位、指数位和尾数位。 符号位(s)用一个位来表示数的正负&#xff0c;0表示正数&#xff0c;1表…

【信息安全】深度分析邮件安全及钓鱼攻击防范

本博文共计3100余字&#xff0c;预计需阅读20分钟 【邮件安全建设】 一、前言 邮件系统作为企业办公网络架构中重要的组成部分&#xff0c;同时也是业务高频使用的办公应用&#xff0c;一旦出现安全问题&#xff0c;业务将会被严重干扰甚至中断&#xff0c;本篇博客通过攻守两…

腾讯云的域名使用阿里云服务器配置

因为近期云服务器到期了&#xff0c;之前的域名已经完成了备案不想轻易回收。于是就换了个厂商&#xff0c;从腾讯云换到了阿里云。但是因为两个厂商不互通。我又不想把域名转入到阿里云。所以就开启了配置之路&#xff0c;一路磕磕绊绊。给大家整理一份顺序&#xff0c;一步到…

Qt6安装教程

由于QT在5.14版本后不再有离线安装版本&#xff0c;均需要通过在线安装 1.下载exe安装包 打开Open Source Development | Open Source License | Qt&#xff0c;往下拉&#xff0c;找到红框所示的按钮 点进去后点击Download即可 2 安装 下载完成后可得到qt-unified-windows…

vue3基础: 组件注册

组件注册 一个 Vue 组件在使用前需要先被“注册”&#xff0c;这样 Vue 才能在渲染模板时找到其对应的实现。组件注册有两种方式&#xff1a;全局注册和局部注册。 全局注册 我们可以使用 Vue 应用实例的.component()方法&#xff0c;让组件在当前 Vue 应用中全局可用。 im…

[情商-11]:人际交流的心理架构与需求层次模型

目录 前言&#xff1a; 一、心理架构 1.1 个体生理层 1.2 个体心理层 1.3 点对点人际交流层 1.4 社会网络层 1.5 社会价值层 二、人的需求层次模型 2.1 需求&#xff08;欲望&#xff09;层次模型 2.2 基因与人需求之间的关系 2.3 个体生理需求 2.4 个体的心理需求…

平衡小车——调试协议

学习目标 熟悉协议的定义掌握协议生成掌握协议解析熟悉消息队列处理协议熟悉消息队列处理业务学习内容 协议的定义 帧头 命令位 数据长度 数据位 校验位 帧尾 字节数 1 1 1 n 1 1 默认值 0x7a 待定 待定 待定 待定

部署Tomcat

Tomcat简介 名称由来&#xff1a;Tomcat最初是由 Sun的软件构架师詹姆斯邓肯戴维森开发的&#xff0c;后来他帮助将其变 为开源项目&#xff0c;并由Sun贡献给Apache软件基金会&#xff0c;由于大部分开源项目OReilly都会出一本相关的 书&#xff0c;并且将其封面设计成某个动物…