当前位置:首页 > 技术 > 正文内容

public.js 公共工具函数详解

访客 技术 2026年5月26日 4

本文档介绍项目中的公共方法集合,主要用于uni-app开发环境。

导入方式

import { serverRef, disablePageScroll, enablePageScroll, openUrl, sleep } from '@/common/js/public.js'

一、serverRef 方法

功能说明

响应式数据获取方法。当绑定的响应式变量值发生改变时,自动向服务器发起请求获取最新数据。

平台限制

由于H5存在跨域问题,在H5端使用时请求URL必须位于同域名下。

参数说明

serverRef({
    url: '',           // [String] 请求地址,必需
    method: 'GET',    // [String] 请求方式,可选,默认GET
    data: {},         // [JSON] 响应式绑定变量,必需
    validate: function() {},  // [Function] 前置验证,返回false则不发起请求
    delay: 200,       // [Number] 防抖延迟毫秒数,可选,默认200ms
    success: function(data) {},   // [Function] 请求成功回调
    fail: function(msg) {},        // [Function] 请求失败回调
    complete: function() {}        // [Function] 请求完成回调
})

使用示例一:组合式API(setup函数内)

<template>
    <uni-data-picker 
        :localdata="gradeList" 
        placeholder="请选择年级" 
        v-model="selectedGrade">
    </uni-data-picker>
    <view>
        服务器返回数据:{{ responseData }}
    </view>
</template>

<script setup>
    import { ref } from 'vue'
    import { serverRef } from '@/common/js/public.js'

    // 年级数据
    const gradeList = [
        {
            text: "一年级",
            value: "1-0",
            children: [
                { text: "1.1班", value: "1-1" },
                { text: "1.2班", value: "1-2" }
            ]
        },
        {
            text: "二年级",
            value: "2-0"
        }
    ]

    const responseData = ref('')
    const selectedGrade = ref('')

    // 监听年级选择变化,自动获取班级数据
    serverRef({
        url: 'http://example.com/api/classes',
        method: 'GET',
        data: {
            gradeId: selectedGrade
        },
        validate: function() {
            return selectedGrade.value.length > 0
        },
        success: function(data) {
            responseData.value = data
        },
        fail: function(error) {
            console.error('请求失败:', error)
        }
    })
</script>

使用示例二:选项式API(data选项中)

<template>
    <uni-data-picker 
        :localdata="gradeList" 
        placeholder="请选择年级" 
        v-model="queryParams.gradeId">
    </uni-data-picker>
    <view>
        服务器返回数据:{{ responseData }}
    </view>
</template>

<script>
    import { serverRef } from '@/common/js/public.js'

    export default {
        data() {
            return {
                responseData: '',
                queryParams: {
                    gradeId: ''
                },
                gradeList: [
                    {
                        text: "一年级",
                        value: "1-0",
                        children: [
                            { text: "1.1班", value: "1-1" },
                            { text: "1.2班", value: "1-2" }
                        ]
                    },
                    {
                        text: "二年级",
                        value: "2-0"
                    }
                ]
            }
        },
        created() {
            const vm = this
            serverRef({
                url: 'http://example.com/api/classes',
                method: 'GET',
                data: vm.queryParams,
                validate: function() {
                    return vm.queryParams.gradeId !== ''
                },
                success: function(data) {
                    vm.responseData = data
                },
                fail: function(error) {
                    console.error('请求失败:', error)
                }
            })
        }
    }
</script>

注意事项

  • data参数必须是ref或reactive包装的响应式变量
  • 当响应式变量值发生变化时,会自动触发服务器请求
  • validate函数返回false时会跳过本次请求
  • delay参数用于防止频繁请求,可根据实际需求调整

二、页面滚动控制方法

方法说明

在弹层显示时,需要禁止底层页面滚动;弹层关闭后,恢复页面滚动功能。

disablePageScroll()   // 禁用页面滚动
enablePageScroll()    // 恢复页面滚动

平台支持

仅支持H5端,APP端暂不支持。

使用示例

<template>
    <button @click="togglePopup">切换弹窗 - {{ showPopup }}</button>
    <view style="height: 2000px;">页面内容区域</view>
</template>

<script>
    import { disablePageScroll, enablePageScroll } from '@/common/js/public.js'

    export default {
        data() {
            return {
                showPopup: false
            }
        },
        watch: {
            'showPopup': function(newVal) {
                newVal ? disablePageScroll() : enablePageScroll()
            }
        },
        methods: {
            togglePopup() {
                this.showPopup = !this.showPopup
            }
        }
    }
</script>

三、openUrl 方法

功能说明

打开指定URL地址,或拨打联系电话。

平台支持

APP端和H5端均支持。

参数说明

openUrl(url, target)
  • url: [String] 网址链接或电话号码,必需参数
  • target: [String] 跳转方式,可选,默认值_blank,仅H5端有效

使用示例

<template>
    <view @click="callService">
        联系客服:0556-5371498
    </view>
</template>

<script>
    import { openUrl } from '@/common/js/public.js'

    export default {
        methods: {
            callService: function() {
                openUrl('0556-5371498', '_self')
            }
        }
    }
</script>

四、sleep 方法

功能说明

使程序暂停执行一段时间,常用于模拟延迟操作或等待异步任务完成。

参数说明

sleep(seconds, interval)
  • seconds: [Number] 暂停时长,单位秒,必需参数
  • interval: [Number] 刷新间隔,可选,默认1000ms

注意事项

调用sleep的函数必须使用async修饰,并在调用时使用await等待。

使用示例

<template>
    <button @click="delayedShow">点击后3秒显示内容</button>
    <view v-if="isVisible">
        内容已显示
    </view>
</template>

<script>
    import { sleep } from '@/common/js/public.js'

    export default {
        data() {
            return {
                isVisible: false
            }
        },
        methods: {
            delayedShow: async function() {
                console.log('开始等待...')
                await sleep(3)
                console.log('等待结束')
                this.isVisible = true
            }
        }
    }
</script>

进阶使用

当暂停时间较短时(如0.5秒),可调整interval参数:

// 暂停0.5秒,interval设为100
await sleep(0.5, 100)

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。