Skip to content

框架

框架中封装好的可以直接使用的内置函数

Page()函数

ts
作用:	注册小程序中的一个页面。接受一个 Object 类型参数,其指定页面的初始数据、生命周期回调、事件处理函数等

参数:	Object对象
	data属性,作为页面的初始数据状态
    onShareAppMessage()方法 分享功能

示例代码

xml
<view>{{text}}</view>
<view>{{array[0].msg}}</view>
ts
Page({
    // 响应式数据
    data: {
        text: 'init data',
        array: [{msg: '1'}, {msg: '2'}]
    }
    // 方法
    changeText(){
    	console.log(window) // 这种写法是错误的,没有window
    	console.log(this) // this指向指向当前页面的配置对象(Page函数体内部对象)
	}
})

分享钩子

onShareAppMessage()

用于分享功能

ts
执行时机:系统左上角的三个点分享

分享功能,在页面,点击右上角的三个角时触发

监听用户点击页面内转发按钮(button 组件 open-type="share")或右上角菜单“转发”按钮的行为,并自定义转发内容
ts
注意:只有定义了此事件处理函数,右上角菜单才会显示“转发”按钮
onShareAppMessage(params)
参数:
    params.from	区分系统分享还是自定义按钮分享menu是系统,button是自定义内容
    
返回值: 返回一个对象
	title		转发卡片标题
    path		转发卡片跳转路径
    imageUrl	转发卡片预览图片

使用案例

/pages/detail/detail.js

js
Page({
    //详情页面生命周期函数onLoad
    onLoad(options) {
        console.log(options);
    },
    //系统左上角的三个点分享
    onShareAppMessage(params) {
        //params对象:from区分事件源 
        //menu:左上角三个按钮
        //button:自定义按钮
        if (params.from == 'menu') {
            //分享自定义内容
            return {
                title: '我来自系统三个点',
                path: "/pages/detail/detail",
                imageUrl: ''
            }
        }else{
            return {
                title: '自定义按钮分享',
                path: "/pages/detail/detail",
                imageUrl: '' 
            }
        }
    }
})

/pages/detail/detail.wxml

xml
<!--pages/detail/detail.wxml-->
<view>我是详情</view>
<!-- 通过设置属性 open-type 为自定义转发按钮 -->
<button type="primary" size="mini" open-type="share">分享内容</button>

/pages/index/index.wxml

xml
<view class="home">
    <view class="title">首页</view>
    <view>{{name}}</view>
    <image src="https://2216847528.oss-cn-beijing.aliyuncs.com/asset/20241118104045.png" 
        style="transform:rotate({{deg}}deg)"
        class="avatar"
    />
    <view>声明式导航</view>
    <navigator url="/pages/detail/detail">
        <text class="iconfont icon-baomirenyuan" style="font-size: 80rpx;"></text>
    </navigator>
    <view>编程式导航</view>
    <button type="primary" size="mini" bind:tap="goDetail">
        <text class="iconfont icon-baomirenyuan"></text>
    </button>
</view>

/pages/index/index.js

js
//通过Page方法创建页面   App->Page
Page({
    //页面数据
    data: {
        name: '结城sakuna',
        deg:0,
    },
    //编程式导航按钮回调
    goDetail(){
        //编程式导航页面跳转
        //navigateTo:A->B,但是A页面不会销毁(不能跳转到tabbar页面)
        //redirectTo 关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面。
        wx.redirectTo({
          url: '/pages/detail/detail?a=1&b=2',
        })
    },
})

页面生命周期钩子

ts
onLoad		生命周期回调—监听页面加载
onShow		生命周期回调—监听页面显示
onReady		生命周期回调—监听页面初次渲染完成
onHide		生命周期回调—监听页面隐藏
onUnload	生命周期回调—监听页面卸载

使用案例

/pages/detail/detail.js

js
Page({
    //详情页面生命周期函数onLoad
    onLoad(options) {
        console.log(options);
    },
    //系统左上角的三个点分享
    onShareAppMessage(params) {
        //params对象:from区分事件源 
        //menu:左上角三个按钮
        //button:自定义按钮
        if (params.from == 'menu') {
            //分享自定义内容
            return {
                title: '我来自系统三个点',
                path: "/pages/detail/detail",
                imageUrl: ''
            }
        }else{
            return {
                title: '自定义按钮分享',
                path: "/pages/detail/detail",
                imageUrl: '' 
            }
        }
    }
})

/pages/detail/detail.wxml

xml
<!--pages/detail/detail.wxml-->
<view>我是详情</view>
<!-- 通过设置属性 open-type 为自定义转发按钮 -->
<button type="primary" size="mini" open-type="share">分享内容</button>

/pages/index/index.wxml

xml
<view class="home">
    <view class="title">首页</view>
    <view>{{name}}</view>
    <image src="https://2216847528.oss-cn-beijing.aliyuncs.com/asset/20241118104045.png" 
        style="transform:rotate({{deg}}deg)"
        class="avatar"
    />
    <view>声明式导航</view>
    <navigator url="/pages/detail/detail">
        <text class="iconfont icon-baomirenyuan" style="font-size: 80rpx;"></text>
    </navigator>
    <view>编程式导航</view>
    <button type="primary" size="mini" bind:tap="goDetail">
        <text class="iconfont icon-baomirenyuan"></text>
    </button>
</view>

/pages/index/index.js

js
//通过Page方法创建页面   App->Page
Page({
    //页面数据
    data: {
        name: '结城sakuna',
        deg:0,
    },
    //编程式导航按钮回调
    goDetail(){
        //编程式导航页面跳转
        //navigateTo:A->B,但是A页面不会销毁(不能跳转到tabbar页面)
        //redirectTo 关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面。
        wx.redirectTo({
          url: '/pages/detail/detail?a=1&b=2',
        })
    },
})

页面滑动钩子

onPageScroll()

ts
onPageScroll()
监听用户滑动页面事件

参数 Object object
属性类型说明
scrollTopNumber页面在垂直方向已滚动的距离(单位px)
ts
//通过Page方法创建页面   App->Page
Page({
    //页面数据
    data: {
        name: '结城sakuna',
        deg:0,
    },
    //编程式导航按钮回调
    goDetail(){
        //编程式导航页面跳转
        //navigateTo:A->B,但是A页面不会销毁(不能跳转到tabbar页面)
        //redirectTo 关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面。
        wx.redirectTo({
          url: '/pages/detail/detail?a=1&b=2',
        })
    },
    // 监听页面滚动
    onPageScroll(event){
        console.log(event) // 返回一个像素位置
    }
})

监听滚动到底事件

onReachBottom()

ts
// 监听到底函数
onReachBottom(() => {
	if (status.value == "more") {
		page.value++
		getCourse()
	}
})

setData()函数

用于页面响应式数据,类似于 react中的setState

ts
调用者:指向当前页面的配置对象(Page函数体内部对象)
this.setData()
参数:对象{},对象中的属性和属性值会替换旧的属性和属性值
返回值:无
ts
handle(){
    // 这种不是响应式数据,需要使用 setData函数设置 数据状态才是响应式
    console.log(this.data.msg += 1) // this 指向当前页面的配置对象(Page函数体内部对象)
    const newMsg = this.data.msg + 1;
    // 设置响应式数据
    this.setData({
        msg:newMsg
    })
}