uniapp组件定义

这篇具有很好参考价值的文章主要介绍了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可以是简单的数组,或者使用对象作为替代,对象允许配置高级选项,如类型检测、自定义验证和设置默认值。

选项 类型 说明
type String、Number、Boolean、Array、Object、Date、Function、Symbol,任何自定义构造函数、或上述内容组成的数组 会检查一个 prop 是否是给定的类型,否则抛出警告
default any 为该 prop 指定一个默认值。如果该 prop 没有被传入,则换做用这个值。对象或数组的默认值必须从一个工厂函数返回
required Boolean 定义该 prop 是否是必填项
validator Function 自定义验证函数会将该 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中不可使用与生命周期同名的方法名。文章来源地址https://www.toymoban.com/news/detail-787121.html

到了这里,关于uniapp组件定义的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端vue uni-app多图片上传组件,支持单个文件,多个文件上传 步骤条step使用

    快速实现多图片上传组件,支持单个文件,多个文件上传 步骤条step使用; 阅读全文下载完整代码请关注微信公众号: 前端组件开发 效果图如下: 使用方法   使用方法 HTML代码部分   html JS代码 (引入组件 填充数据)   javascript

    2024年02月08日
    浏览(92)
  • uni-app自定义组件及拓展(uni-ui)组件的使用

    UniApp 是一个基于 Vue.js 的跨平台应用框架,可以用来开发同时运行在多个平台(如微信小程序、支付宝小程序、App等)的应用程序。在 UniApp 中,组件的使用与 Vue.js 中的组件使用基本类似,但需要考虑跨平台兼容性。 1. 创建组件文件 在 UniApp 项目中创建一个新的组件,通常

    2024年04月29日
    浏览(56)
  • uni-app小程序父组件数据更新,实现自定义组件刷新视图

    之前错误的思路 新思路(忽略我的参数命名,写文章的时候方便。)

    2024年02月16日
    浏览(51)
  • uniapp系列-超详细教你在uni-app+vue3里通过web-view组件传递信息打开H5页面写入localstorage并解决兼容性

    web-view 是一个 web 浏览器组件,可以用来承载网页的容器,会自动铺满整个页面(nvue 使用需要手动指定宽高)。 点击这里直达官网文档 点击这里下载我的代码demo 本文最下面还有一些 常见或者奇怪问题解决方案 哦~ 之前开发好的H5页面,不想重新开发,想要直接放进项目用

    2024年02月09日
    浏览(59)
  • uni-app自定义组件components导入失败或页面不显示文本等

            一般来说分三步走,如下图  如果引入不成功则考虑以下几个问题: 是 components 而非 component 导入后的命名方式采用驼峰命名法 检查需要引入的文件路径和文件名是否正确 如果还有问题,则采用第二种方式直接在 components 中引入、注册一体,引入直接使用 chan

    2024年02月16日
    浏览(64)
  • uni-app编译成钉钉小程序,uViewUI组件样式失效,自定义组件样式失效

    公司项目需要把原本用 uinapp 开发的微信小程序想要在钉钉上也能使用,然后就打算用uniapp编译成钉钉小程序,看看是否有坑,不试不知道,一试吓一跳,官方没有提供钉钉的编译方式,按照网上文章的配置编译成钉钉小程序后,初步发现, uView-ui的icon没啦 ,然后样式和布局

    2024年02月11日
    浏览(58)
  • uni-app:vue3 + uni-app 在微信小程序中无法使用app.component全局注册组件

    按上文中的代码执行后,会发现在微信小程序开发中全局注册的组件是无法显示的,这是uniapp的一个未解决bug, 在uniapp中出了可以通过vue实例的component方法注册全局组件外,uniapp支持另一种全局注册的方式,就是通过 easycom 扫描注册,步骤如下 easycom 的扫描流程是:通过代码

    2024年02月16日
    浏览(98)
  • #Uniapp:uni-app中vue2生命周期--11个

    uni-app中vue2生命周期 生命周期钩子 描述 H5 App端 小程序 说明 beforeCreate 在实例初始化之后被调用 详情 √ √ √ created 在实例创建完成后被立即调用 详情 √ √ √ beforeMount 在挂载开始之前被调用 详情 √ √ √ mounted 挂载到实例上去之后调用 详情 注意:此处并不能确定子组件

    2024年02月02日
    浏览(51)
  • uni-app 使用v-model封装picker组件和自定义样式

    1、v-model封装picker组件 (1)封装组件myPicker.vue (2)组件调用 (3)属性说明 属性名 类型 默认值 说明 options Object 数据选项,默认[{ name: \\\"办公\\\", value: \\\"1\\\" }]格式 rangeKey String label 数据选项的属性名 rangeValue String value 数据选项的属性值 placeholoder String 请选择 未选择数据时的默认

    2024年02月09日
    浏览(55)
  • Vue.js uni-app 混合模式原生App webview与H5的交互

    在现代移动应用开发中,原生App与H5页面之间的交互已经成为一个常见的需求。本文将介绍如何在Vue.js框架中实现原生App与H5页面之间的数据传递和方法调用。我们将通过一个简单的示例来展示如何实现这一功能。 效果图如下: 首先,我们需要在Vue.js项目中引入原生App与H5页面

    2024年02月16日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包