范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

小程序自定义组件

  小程序中的js对象实例,按作用域大小划分,大致可以归为三类:App, Page, Component。
  Component 也即本文要重点要讲的自定义组件,或称模板。一、App
  App() 必须在 app.js  中调用且只能调用一次,用于注册成为一个小程序应用。
  1、app.jsApp({   // 小程序初始化完成时触发,全局只触发一次。   onLaunch (options) {     // 通过options.scene获取场景值可以得到小程序进入的渠道来源     // 参数也可以使用 wx.getLaunchOptionsSync 获取。   },      // 小程序启动,或从后台进入前台显示时触发。   onShow (options) {     // 小程序启动,或从后台进入前台显示时触发。   },      // 小程序从前台进入后台时触发。   onHide () {     // 也可以使用 wx.onAppHide 绑定监听。   },      onError (msg) {     console.log(msg)   },      // 小程序要打开的页面不存在时触发。也可以使用 wx.onPageNotFound 绑定监听。   onPageNotFound(res) {     // 如果是 tabbar 页面,需使用 wx.switchTab     // 若需保留历史页面路径,需用wx.navigateTo,而非wx.redirectTo (会销毁当前页面)      // 若存在循环操作,则需要计算页面层级(wx.navigateTo最多跳转10层页面,超过会报页面栈溢出)     let pageNum = getCurrentPages().length     if(pages >= 10){         // 超过页面路由层深,返回重载应用首页         wx.reLaunch({           url: "/pages/index/index"         })     }else{         wx.navigateTo({           url: "/pages/..."         })     }          // 控制后退页面数 wx.navigateBack();  wx.navigateBack({delta: n}); // 后退n页     wx.navigateBack({         // 回退所有循环操作页面,只保留前3页         delta: pageNum - 3,          // iOS会先重定向后回退页面,需要控制先回退完成后再重定向到指定页面         complete: function(){            wx.redirectTo({              url: "/pages/..."           })         }     })   },      // 全局数据,可以保存用户登录信息等   globalData: {        } })
  2、app.json
  app.json 全局配置(所有页面需要在此文件中注册配置pages。该文件不能写注释。){     "pages": [         "pages/index/index"     ],      "window": {         "backgroundTextStyle": "light",         "navigationBarBackgroundColor": "#fff",         "navigationBarTitleText": "我的小程序",         "navigationBarTextStyle": "black"     },      "permission": {         "scope.userLocation": {             "desc": "你的位置信息将用于定位效果展示"         }     },      "style": "v2",     "sitemapLocation": "sitemap.json",      "tabBar": {         "color": "#333333",         "selectedColor": "#333333",         "selectedFontweight": "600",         "backgroundColor": "#fff",         "list": [             {                 "pagePath": "pages/index/index",                 "iconPath": "/img/icon_index0.png",                 "selectedIconPath": "/img/icon_index1.png",                 "text": "首页"             },             {                 "pagePath": "pages/mine/mine",                 "iconPath": "/img/icon_mine0.png",                 "selectedIconPath": "/img/icon_mine1.png",                 "text": "我的"             }         ]     } }二、Page
  1、/pages/chat-list/chat-list.jsimport Api from "../../api.js";  Page({     /**     * 页面的初始数据     */     data: {         userId: 0,         pageNum: 1,         chats: [],         noMoreChatData: false,         noMoreUserData: false     },      // 扫码     scanCode(){         // 这一步重命名赋值变量,是为了在回调函数内部能够获取当前页面对象         let that = this         wx.scanCode({             onlyFromCamera: true,             success (res) {                 // {"charSet":"utf-8","result":"32","codeVersion":1,"errMsg":"scanCode:ok","rawData":"MzI=","scanType":"QR_CODE"}                 if(res.result == that.data.userId){                     wx.showToast({                    		 title: "扫码成功"                     })                 }else{                     wx.showToast({                         title: "二维码无效",                         icon: "none"                     })                 }             },             fail (res) {                 wx.showToast({                     title: res,                     icon: "none"                 })             }         })     },      // 弹框下拉选菜单     chooseMenu() {         let that = this         wx.showActionSheet({             itemList: ["离职-随时到岗", "在职-月内到岗", "在职-考虑机会", "在职-暂不考虑"], // 不能超过6个             success (res) {                 // todo something             }         })     },      // 订阅服务消息通知(后台服务器按模板ID推送通知,小程序订阅接收)     subscribeNotice(){         wx.requestSubscribeMessage({             tmplIds: ["o-ztPlfmck2B6yWFey_pLloT3CxUqLrbXnX-FvfiWlo"],             success: (res) => {}         })     },        // 页面锚点     pageScrollTo(){          wx.pageScrollTo({               selector:"#footer", // 滚动至指定节点元素id               duration: 0  // 滚动过渡时间           })     },        /**     * 生命周期函数--监听页面加载     */     onLoad: function (options) {         // 可以通过options获取上级页面路由路径传参         let userId = options.userId         this.setData({        		 userId: userId         })     },        /**     * 生命周期函数--监听页面初次渲染完成     */     onReady: function () {     },        /**     * 生命周期函数--监听页面显示     */     onShow: function () {         // 一般会在页面显示时,请求服务加载数据,动态渲染页面展示         this.getChatsByPage()          // 禁止页面分享菜单(shareAppMessage分享给朋友;shareTimeline分享到朋友圈)         wx.hideShareMenu({         		menus: ["shareAppMessage", "shareTimeline"]         })     },        /**     * 生命周期函数--监听页面隐藏     */     onHide: function () {     },        /**     * 生命周期函数--监听页面卸载     */     onUnload: function () {         // wx.redirectTo 会触发当前页面销毁         // 一般也会在页面销毁时(包括onHide时),关闭当前页面的定时器     },        /**     * 页面相关事件处理函数--监听用户下拉动作     */     onPullDownRefresh: function () {         // 该事件默认关闭,需要在页面对应的json配置文件中开启 "enablePullDownRefresh": true         // 比如聊天页面,后台服务按时间倒序返回聊天记录,前端第一页拉取最新的聊天记录,下拉刷新拉取历史聊天记录                  // 下拉刷新,获取下一页历史聊天数据列表         this.getChatsByPage()     },        // 获取聊天数据列表    getChatsByPage(){    		 if(!this.data.noMoreChatData){             this.setData({                 pageNum: this.data.pageNum + 1             })                           // 前端拉取的每一页记录,逆序处理后,追加到当前数据列表的头部             let chats = Api.getChatsByPage() // 分页查询,从后台服务器拉取聊天记录数据             if(chats != null && chats.length > 0){                 chats.sort(function(a, b){return a["id"] - b["id"]}) // 逆序处理:数组属性获取方法,重写排序规则要return                 that.setData({                     chats: chats.concat(that.data.chats) // 头部插入数组                 })             }else{                 that.setData({                     noMoreChatData: true                 })             }         }    },        // 分页查询数据列表(触底onReachBottom后若有更多数据再请求)     noMoreUserData(e) {         // 参数值由子组件user-list触发trigger传递过来         this.setData({             noMoreUserData: e.detail         })     },        /**     * 页面上拉触底事件的处理函数     */     onReachBottom: function () {          // 分页查询处理          if (!this.data.noMoreUserData) {                // 获取子组件 user-list               this.userList = this.selectComponent("#userList")               // 调用子组件的方法               this.userList.getDataList()           }     },        /**     * 用户点击右上角分享(移除该函数,则整个页面禁止分享)     */     onShareAppMessage: function () {     } })
  2、/pages/chat-list/chat-list.json
  页面对应的json配置文件:引用组件;开启下拉刷新监听;设置标题栏{     "usingComponents": {         "user-list": "/components/user-list/user-list"     },     "enablePullDownRefresh": true,     "navigationBarTitleText": "聊天列表" }
  3、/pages/chat-list/chat-list.wxml           三、Component
  如果诸多Page间存在一些反复重复部分,可以选择新建Component,抽取出公共部分作为模板引用,也即自定义组件,从而达到复用的目的。
  组件json配置,声明为组件(当然,组件内部还可以再嵌套引用其他组件):
  1、/components/user-list/user-list.json{     "component": true,     "usingComponents": {     			"no-more": "/components/no-more/no-more"     } }
  2、/components/user-list/user-list.jsimport Api from "../../api.js"  // 子组件 user-list Component({        /**     * 组件的属性列表 (父传子交互属性)     */     properties: {    		 userId: Number     },        /**     * 组件的初始数据 (子组件私有数据,data中可以获取到properties中的传参值)     */     data: {         userId: 0,         dataList: [],         pageNum: 1,         noMoreData: false     },        /**     * 组件的方法列表     */     methods: {         // 子组件中定义的方法,父组件中获取到子组件对象后,可以调用子组件方法         getDataList() {             // 获取数据列表             let dataList = Api.getDataList()             if(dataList.length > 0){                 this.setData({                     dataList: this.data.dataList.concat(dataList),                     pageNum: pageNum + 1                 })             }else{                 this.setData({                     noMoreData: true                 })                 // 子组件user-list, 触发父组件对象绑定的监听方法                 this.triggerEvent("noMoreUserData", true)             }         }     } })

索尼前首席执行官担忧日本制造输给中国为什么日本制造业无法战胜中国?索尼前CEO出井伸之说这是日本醉心于过去的日本制造神话,未能很好融合IT技术使然日本民营厂商还存在对政府官僚依赖的大问题。本文内容摘录自他的新书经营人从3599元跌至2499元,6400万四摄55W,12GB运存旗舰售价大跳水机身储存容量可以低,但运行内存不能小,这就是如今智能手机选择不同规格版本最佳的答案,一般来说128GB机身储存容量不过度储存图片和视频基本已经够用了,不会影响日常使用,但运行内存就进可攻,退可守的创新Stage360音箱,体验入门级杜比全景声疫情不断反复,宅在家里的时间也越来越长,为了让在家里的时间也充满欢乐,决定将家庭影音系统的音质加强一下。但传统的家庭影院对物理空间和布线都有很高的要求,对大多数人来说都没有精力或者华为员工被判刑,竟越权访问机密数据,发给这家公司!收受5双篮球鞋,7000元购物卡4月12日,一则华为员工利用公司系统Bug越权访问机密数据被判刑的消息登上微博热搜!图片源自微博这则消息大致情况为,华为员工易某调离岗位后未清理ERP登陆信息,利用bug越权访问,苹果概念股思林杰上市22天跌18天,股民怒了没有哪个公司像这样文张佳儒估计中签缴费的人,心都在滴血!这哪里是吃肉,这是挨飞刀!有股民这样评价科创板新股思林杰,连续跌一个月,到现在还没有明显企稳的迹象,这是很难受的走势。4月14日午盘,思林杰报年度全能5G手机荣耀X10荣耀X10在外观上也保证了相当的水平,正面搭载了6。63英寸升降式全面屏,屏占比达到了92,保证了正面的全面屏视觉效果。荣耀X10背面引进了类似图像分割的设计语言,光线打上去之后能吉利新能源几何C解决您的续航焦虑为消除纯电动车用户痛点,几何C搭载全球首创能量管理解决方案SEM智能能量管理系统蓄能节能提升NEDC基准续航,回能提升真续航控能提升真准续航通过领先的大数据自学习,不断积累升华,通江龙船艇氢装上船聚焦新能源船助力双碳目标随着生态文明建设的加快和碳达峰碳中和目标的提出,清洁燃料在船舶领域的应用正在迎来新的曙光。作为下一代船用清洁能源,氢燃料近年来在航运业减排中的作用备受关注,布局氢能船舶的企业明显增中国要警惕特斯拉这样的企业如标题所说,我们需要警惕中国境内的特斯拉们,就当是阴谋论吧,但确实有些事情不得不说。1。马斯克拿拜登开涮,各位别太当真,在美国的媒体上经常有这样的情形发生,也许这就是美国的自由吧,终于降了,本周五油价或下调结束六连涨,新能源却被迫涨价今年油价连续六连涨,国内油价也达到历史高位。目前国内平均油价95号突破9元,98号更是突破了个位数,硬是给加油站的价目表做了一次设备升级。本周五油价或迎年内首降好消息是,本周五晚上多彩保护胶原理多彩涂料保护胶是一种人工合成白色粉状锂镁硅酸盐胶体材料,无毒无味无刺激性不溶于水油和乙醇。浸水溶胀,在自来水中以较低含固量分散就可以形成高透明高粘度高触变性的纳米凝胶而同样的含固量
实测!电热水器,有多耗电?洗个澡花多少钱?忙了一整天,下班后洗一个热水澡可以缓解疲劳,促进睡眠,是一件很好的事!现在生活中,常见的热水器类型有电热水器燃气热水器太阳能热水器,这三种热水器并列为三大热水器。电热水器具有安装便2022年了,它还先于时代吗?S10发布时,三星打出了十代先于时代的口号,现在来看S10依旧配得上这句广告词,这也是为什么在今天还有众多粉丝对它念念不忘,愿其追为王者旗舰。首先真机上手三星S10会有一个最直观的iOS15。4更新后电池健康度下降?首批体验报告出炉,看完再决定期待已久的iOS15。4正式版终于到来,这是苹果近几个月来推送的最大的一次更新,它解决了很多之前遇到的BUG,优化了体验,同时也带来了全新的功能,很建议大家更新。当然,很多果粉面对骁龙8Plus处理器或将在五六月份登场,台积电4nm工艺打造不可否认骁龙8旗舰处理器的性能实力,其在整个安卓领域都是拔尖的,但是在实际表现上还是难以摆脱火龙的称号。联发科乘胜追击,今年上半年不少旗舰机型都选择了天玑9000处理器,天玑810拼多多回应六万人砍价不成功不实苹果回应iOS15。4正式版续航翻车AMDFSR2。0即将面世极客头条CSDN的读者朋友们早上好哇,极客头条来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。整理梦依丹出品CSDN(IDCSDNnews)一分钟速览新闻点!拼多多回应六万人砍价不iPhone13苍岭绿配色引争议,网友直呼不如国产旗舰外观设计有诚意从iPhone12开始,苹果都会在发布第二年的春季发布会上为iPhone推出新配色,比如iPhone12在去年春季上新了紫色配色,而在今年的春季发布会,苹果为各位果粉带来了全新的苍iPhone14Pro外观CAD渲染图曝光,感叹号屏幕貌似成为现实最近网上关于iPhone14系列的爆料消息层出不穷,其中最多的当属非常有特色的!号屏幕。按照往年惯例,iPhone14系列预计会在9月份发布,所以现在网上有相关爆料消息也实属正常。从外观颜值到内在实力,三星GalaxyA535G内外皆有料外观精致时尚的手机,一直是潮流人士的最爱。三星最新发布的A系列新品GalaxyA535G,承载了三星系列产品一直以来时尚和科技感俱佳的设计理念,并且带来全新的科技创新和用户体验的升专家由知网谈如何走出知识分享困境建设有吸引力的国家知识资源数据库专家由知网谈如何走出知识分享困境学者胜诉中国知网,在学术圈如一石激起千层浪。从关注案件本身,到探讨作者期刊数据库平台三者的责权利关系,本报对此作了连MySQL中如何修改用户各种信息IFEXISTS的含义user的指定authoption选项IDENTIFIEDBYauthstringIDENTIFIEDWITHauthpluginIDENTIFIEDWITH快看3月21日,针对日前股东变更传闻,界面教育从作业帮获悉,作业帮股东无变化,相关股东没有退出。天眼查App显示,近日,作业帮关联公司小船出海教育科技(北京)有限公司(下称小船出海)发