前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >uni-app(优医咨询)项目实战 - 第2天

uni-app(优医咨询)项目实战 - 第2天

作者头像
陶然同学
发布2024-05-03 09:06:07
880
发布2024-05-03 09:06:07
举报
文章被收录于专栏:陶然同学博客陶然同学博客

学习目标:

  • 掌握WXML获取节点信息的用法
  • 知道如何修改 uni-ui 扩展组件的样式
  • 掌握 uniForm 表单验证的使用方法
  • 能够在 uni-app 中使用自定义字体图标
一、uni-app 基础知识

uni-app 是组合了 Vue 和微信小程序的相关技术知识,要求大家同时俱备 Vue 和原生小程序的开发基础。

1.1 节点信息

在此再次强调一下原生小程序中并没有 DOM 操作相关的内容,也因此在 uni-app 中也是无法对 DOM 进行操作的,但在实际开发过程中是有获取节点信息,如宽高、位置等信息的需求的,这一节就来学习在 uni-app 中如何获取节点的宽高及位置等信息。

1.1.1 创建查询器

在网页中可以直接使用 document.querySelector 来查找 DOM 节点,在 uni-app 或小程序中则没有这样一个方法,取而代之的是调用 API uni.createSelectorQuery 创建一个查询实例(查询器),进而调用该实例的方法来查询页面中的节点元素。

代码语言:javascript
复制
<!-- pages/wiki/index.vue -->
<script setup>
 ?import { onMounted } from 'vue'
    
 ?// 在生命周期中调用
 ?onMounted(() => {
 ? ?// 节点查询器(实例)
 ? ?const selectorQuery = uni.createSelectorQuery()
        console.log(selectorQuery)
  })
</script>
?
<template>
 ?<view class="container">
 ? ?<view class="box">获取这个盒子的宽高、位置等信息</view>
 ?</view>
</template>
?
<style lang="scss">
 ?page {
 ? ?padding: 30rpx;
  }
?
 ?.box {
 ? ?width: 300rpx;
 ? ?height: 300rpx;
 ? ?margin-top: 40rpx;
 ? ?background-color: pink;
  }
</style>
?

注意事项:

  1. 需要在 onMountedonReady 生命周期中调用
  2. 选择自定义组件中的节点时,需要调用 in 方法并传入当前页面实例(后面会例子来演示)
1.1.2 节点对象

在查询节点时分成 3 种情形,获取到的结果为节点信息对象(NodesRef)

  • select 根据选择器的要求,只查找符合条件的第一个节点,结果是一个对象
  • selectAll 根据选择器的要求,查找符合条件的全部节点,结果是一个对象数组
  • selectViewport 特指获取视口,查找视口的尺寸、滚动位置等信息
代码语言:javascript
复制
<script setup>
 ?import { onMounted } from 'vue'
?
 ?onMounted(() => {
 ? ?// 1. 节点查询器(实例)
 ? ?const selectorQuery = uni.createSelectorQuery()
 ? ?
 ? ?// 2. 查找节点
?
 ? ?// 2.1 查找单个节点
 ? ?selectorQuery.select('.box').boundingClientRect((rect) => {
 ? ? ?// 获取宽高和位置
 ? ? ?console.log(rect)
 ?  })
?
 ? ?// 2.2 查找全部节点
 ? ?selectorQuery.selectAll('.box').boundingClientRect((rects) => {
 ? ? ?// 获取宽高和位置
 ? ? ?console.log(rects)
 ?  })
?
 ? ?// 2.3 查找视口信息
 ? ?selectorQuery.selectViewport().boundingClientRect((rect) => {
 ? ? ?console.log(rect)
 ?  })
?
 ? ?// 3. 执行请求结果
 ? ?selectorQuery.exec()
  })
</script>
?
<template>
 ?<view class="container">
 ? ?<view class="box">获取这个盒子的宽高、位置等信息</view>
 ? ?<view class="box"> 类选择器名称一样的另一个盒子 </view>
 ?</view>
</template>
?
<style lang="scss"></style>

注意事项:

  1. 不执行 exec 方法,将获取不到任何的节点信息
  2. 有多个查询步骤时,在结尾只执行一次 exec 即可,避免重复查询
  3. exec 方法代表执行结束,因此务必保证最后再调用
1.1.3 节点信息

节点信息对象中包含了若干的信息,根据需要调用不同的方法进行获取:

  1. boundingClientRect 节点的宽高及位置,长度单位是 px
  2. scrollOffset 节点滚动的位置,仅支持 scroll-view 组件或页面( viewport)
代码语言:javascript
复制
<script setup>
 ?import { onMounted } from 'vue'
?
 ?onMounted(() => {
 ? ?// 1. 节点查询器(实例)
 ? ?const selectorQuery = uni.createSelectorQuery()
 ? ?
 ? ?// 2. 查找节点
?
    // 省略了部分代码
?
 ? ?// 2.3 查找视口信息
 ? ?selectorQuery.selectViewport().boundingClientRect((rect) => {
 ? ? ?console.log(rect)
 ?  })
 ? ?
 ? ?selectorQuery.selectViewport().scrollOffset((offset) => {
 ? ? ?console.log(offset)
 ?  })
?
 ? ?// 3. 执行请求结果
 ? ?selectorQuery.exec()
  })
</script>
?
<template>
 ?<view class="container">
 ? ?<view class="box">获取这个盒子的宽高、位置等信息</view>
 ? ?<view class="box"> 类选择器名称一样的另一个盒子 </view>
 ?</view>
</template>
?
<style lang="scss"></style>

注意事项:

  1. 在获取元素的位置时是按已定位的祖先元素为参考,即大家平时理解的“子绝父相”方式
  2. 元素未定位时参视口(viewport)为参考
1.2 自定义组件

在 uni-app 中自定义组件的定义与 Vue 组件基本一致,不要参照原生小程序方式来定义组件。

1.2.1 easycom组件规范

easycom 是 uni-app 自定义的加载组件的规范,按该规范定义的组件可以实现自动导入,其规范要求如下:

  1. 安装在项目根目录的 components 目录下,并符合 components/组件名称/组件名称.vue
  2. 安装在 uni_modules 目录下,路径为 uni_modules/插件ID/components/组件名称/组件名称.vue

大家回忆一下扩展组件 uni ui 是不是就是在没有引入的情况下自动导入的,其原因就是符合 easycom 组件规范。

1.2.2 custom-tabs

标签页(tabs)的切换在开发中是经常会使用到的一种交互方式,【优医咨询】项目就用到这种交互方式,接下来我们自已封装一个标签页组件,按着 easycom 的规范创建组件目录及文件:

接下来将上次课中完成的 tabs 部分的布局代码迁移到当前组件中:

代码语言:javascript
复制
<view class="custom-tabs">
 ?<view class="custom-tabs-bar active">
 ? ?<text class="tabbar-text">关注</text>
 ?</view>
 ?<view class="custom-tabs-bar">
 ? ?<text class="tabbar-text">推荐</text>
 ?</view>
 ?<view class="custom-tabs-bar">
 ? ?<text class="tabbar-text">护肤</text>
 ?</view>
 ?<view class="custom-tabs-bar">
 ? ?<text class="tabbar-text">减脂</text>
 ?</view>
 ?<view class="custom-tabs-bar">
 ? ?<text class="tabbar-text">饮食</text>
 ?</view>
 ?<view class="custom-tabs-cursor"></view>
</view>
代码语言:javascript
复制
// 自定义tabbar
.custom-tabs {
 ?display: flex;
 ?position: relative;
 ?padding: 0 30rpx;
}
?
.custom-tabs-bar {
 ?height: 80rpx;
 ?line-height: 80rpx
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 学习目标:
    • 一、uni-app 基础知识
      • 1.1 节点信息
      • 1.2 自定义组件
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档


http://www.vxiaotou.com