小程序(四)

十四、分包加载

(一)普通分包与主包

随着项目越来越大,为了用户更好的体验,小程序引用了分包技术,分包技术将tabBar页面及一些全局使用的静态资源,放到主包中,开发者可以根据需要添加分包,这些分包中也可以包含一些页面,但是在用户跳转到分包页面前,小程序是不会下载分包的相关内容。这样也减小了用户使用小程序的压力,加快了小程序的加载速度,避免了很多没有必要的内容的加载。

主包是默认没有放到分包中的所有核心源码中的内容,不需要指定主包!

1、在app.json中指定分包

"subPackages": [
    {
      "root": "modules/goods",
      "name":"goodsModules",
      "pages":[
        "pages/goods/goods",
        "pages/index/index"
    ]
    }
  ]

2、在主包页面中添加navigator跳转到分包页面:

<!-- 注意,这里路径直接使用/定位到modules即可,/默认为项目根路径 -->
<navigator url="/modules/goods/pages/goods/goods" open-type="navigate">点击跳转到分包页面</navigator>

该配置项是一个数组,数组中有三个属性,分别

  •  root,分包的根目录
  • name,指定项目中使用该分包时的名称
  • pages,指定该分包中包含的页面。

因为分包是在数组中声明的,故可以同时有多个分包,但是分包时也有很多其他要注意的地方:

1、所有分包(包括主包)的大小之和不能超过20MB,每个分包的大小不能超过2MB。

2、分包的根目录之间不能进行嵌套,一个分包的根目录不能是另一个分包的子目录

3、主包不可以引用分包资源,分包资源也不可以引用其他分包资源(原因可想而知,因为当用户打开小程序页面时,分包资源在用户跳转之前不会被下载,故不能引用,分包和分包之间亦是如此)。分包可以引用主包中的静态资源。

(二)独立分包

为什么会有独立分包?其适用于如下场景:

当分包页面不依赖主包资源,是一个相对独立的功能时,可以将分包设置为独立分包,如此,只有当从独立分包跳转到主包、其他分包或者直接加载主包时,主包资源才会被下载。

使用:只需要在subPackges属性中的分包对象中增加“independent”属性为true即可。

  {
      "root": "modules/goods",
      "name":"goodsModules",
      "pages":[
        "pages/goods/goods",
        "pages/index/index"
    ],
    "independent": true
    }

注意点:

1、独立分包不受app.wxss中样式影响

2、独立分包不能引用主包的资源(因为那时候主包可能未加载!

3、独立分包中不能使用APP这个构建小程序的方法,否则可能会引起一些未知的错误

(三)分包预加载

人就挺怪,有时候希望只加载用户需要的页面,这样可以更快,但又担心用户突然跳转下载又来不及,两害相权全保留,只是不同场合需要使用不同的方案,这里我们讲一下如何设置预加载。

涉及几个元素:当前所在页面,要预加载页面、开启预加载的环境!(在app.json中配置)

1、在主包主页面开启预加载:

"preloadRule": {
    "pages/index/index":{
      "network": "all",
      "packages": ["goodsModules"]
    }
  }

"network"指定预加载环境:"wifi"、"all";

"packages"指定要加载的分包,可以使用上面指定分包时的"name"属性,也可以使用"root"属性(分包根目录地址)

2、在独立分包中指定预加载主包:

"modules/goods/pages/goods/goods":{
      "network": "all",
      "packages": ["__APP__"]
    }

这里留个疑问,虽然预加载显示了,但是有警告说__APP__没有找到!

十五、微信开放能力

(一)获取微信头像并使用

A、前置准备

我们准备一个被按钮包裹的图片,实现点击图片后跳转出换头像菜单,结构如下:

<button class="btn" >
<image src="{{avatarUrl}}" class="avatarImage" ></image>
</button>
</view>
.btn{
  /* 将背景色设置为透明 */
  background-color: transparent;
}
/* 将按钮的边框去掉 */
.btn::after{
  border: none;
}
/* 设置图片大小 */
.avatarImage{
  width: 333rpx;
  height: 250rpx;
  border-radius: 50%;

}

B、开启菜单跳转

open-type="chooseAvatar"指定跳转出菜单,

随后指定处理的方法bindchooseavatar="bindchooseHandler",方法名没有规定。

<button class="btn" open-type="chooseAvatar" bindchooseavatar="bindchooseHandler">
<image src="{{avatarUrl}}" class="avatarImage" ></image>
</button>
bindchooseHandler(event){
    // 微信头像临时地址会储存在传入参数的detail中
    //这个头像的地址也是临时的,需要我们在自己的服务器做持久化处理!
    console.log(event.detail)
    let avatarUrl= event.detail.avatarUrl;
    this.setData({
      avatarUrl
    })
  }

(二)获取微信昵称并使用

1、我们要让input框和button被form表单包裹,这样才能实现我们的效果。

结构:

</view>
<form bindsubmit="sendName">
<!-- nickName,当点击输入框时,会弹出使用微信昵称的快捷选项 -->
<!-- name属性,提交时form表单会收集name作为key,value值作为value发送到目标服务器 -->
<input type="nickname" class="inputMe" name="nickname"placeholder="请输入昵称"/>
<!-- form-type为submit,当点击该按钮时,就会触发form标点的 -->
<button form-type="submit" class="buttonSubmit">提交昵称</button>
</form>

方法:

 // 表单发送昵称的方法
  sendName(event){
    //昵称会被保存在传入事件参数的detail.value中
    console.log(event.detail.value.nickname);
  }

(三)分享

需要在页面js文件或者按钮中声明按钮类型

A、分享给朋友

1、在页面js文件的Page方法中声明。

  onShareAppMessage(obj){
     console.log(obj);
//return的对象,可以控制分享弹窗的内容,包括名字,路径,最后是本页面的路径。
 return{
       title:'我的分享',
       path:'/pages/index/index',
       imageUrl: "/static/suolong.jpg"
     }
  }

如此,该页面即可分享。

2、通过按钮形式,分享到朋友(注意此种方式需要小程序得到认证)

<button open-type="share">点我分享给朋友</button>

B、分享到朋友圈

1、在js文件中声明分享的方法:

 onShareTimeline(obj){
    console.log(obj); 
    //返回对象,控制转发朋友圈的名字,图片和当前页面的参数
    return{
      title:"我的分享",
      query:"name=chen&age=23",
      imageUrl:"/static/suolong.jpg"
     }
  }

注意:开启分享到朋友圈功能前提是开启分享给朋友功能!

(四)验证手机号码

A、前置

因为验证手机号服务是付费服务,且不对个人开发着开启使用,所以我们要想继续尝试使用,可以在开发时将AppID切换到接口测试号,即可正常使用。方法如下:

1、点击“详情”,然后点击AppId后的修改

2、点击下拉框,选择接口测试号即可

 

 B、快速手机号验证、手机号实时验证

二者的区别是,前者不需要用户接受验证码,后者需要用户等待接受验证码。

结构:

<!-- 手机号快速验证 -->
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">
手机号快速验证
</button>
<!-- 手机号实时验证 -->
<button open-type="getRealtimePhoneNumber" bindgetrealtimephonenumber="getRealtimePhoneNumber">手机号实时验证</button>

js:

 getPhoneNumber(event){
      console.log(event);
      
    },
    getRealtimePhoneNumber(event){
         console.log(event) 
     }

/*/实际需要一个过程就是,将传入参数中的code值传入到后端,然后后端根据code调用相应的API。

/*/返回给我们真正的用户手机号,从而让我们进行业务,这里省略。

 大概结构:

{type: "getrealtimephonenumber", timeStamp: 26538, target: , currentTarget: , mark: , …}
currentTarget: Object
detail: Object
code: "156e5838b4022107394d917d427d463b123952b848a420708c2d9c546"
errMsg: "getPhoneNumber:ok"
__proto__: Object
mark: Object
mut: false
target: Object
timeStamp: 26538
type: "getrealtimephonenumber"
__evName: "getrealtimephonenumber"
_userTap: false
__proto__: Object

(五)客服支持

微信提供了客服支持,只需要设置一下按钮的属性之后,就可以接入微信提供的客服网页(或者小程序),非常的方便!

A、用户端代码:

<button open-type="contact">联系客服</button>

这样,当用户点击该按钮就会跳到客服对话界面,等待客服回复。 

B、客服人员添加与回复

1、在微信公众平台上点击“服务侧边栏”,然后点击“添加客服”按钮,搜索微信号,点击添加:

 

最后点击蓝色字,即可作为客服回复用户疑问。 

2、客服界面展示:

 

(六)getApp()

该方法可以用来获取小程序全局对象,我们可以在app.js中声明一些对象,方法等,在其他页面和组件中,可以通过该方法生成小程序实例,然后通过实例拿到全局数据,这样我就可以实现全局数据和方法传递。 

1、在app.js中声明数据和方法:

// app.js
App({
  globalData:{
    myData:"天下无双,唯我独尊!"
  },
  //设置myData的方法
  setMyData(myData){
    this.globalData.myData = myData;
  }
})

2、在index页面中产生app实例对象并使用app中的方法:

// 生成app实例对象
const appInstance = getApp();
Page({
  
  //获取全局实例然后,应用到页面上。
  data:{
    indexData:""
  },
  onLoad(){
    this.setData({
      indexData:  appInstance.globalData.myData,
    })
  },
  changeText(){
//注意这里只是为了证明可以调用全局app中的方法,其数据并不是响应式的。
    appInstance.setMyData("我才是无敌的!");
  }
})
<text>{{indexData}}</text>
<button bind:tap="changeText">点我修改data</button>

十六、数据通信(补充)

(一)跳转新页面后利用数据通道

本质上跟vue的自定义事件实现页面之间数据传递很像,要接受数据的页面,利用on方法绑定自定义事件,接受方执行自定义事件接受到数据。不过微信将这种思想更加综合了,中间好似有个看不见的中间人,让数据接受方也可以发送数据,从而实现数据互通。(本质上,还是绑定自定义事件,实现数据传递

1、在接收方使用this.navigateTo,在success回调函数中调用eventChannel发送数据:

wx.navigateTo({
      url: '/pages/second/second',
  
      success(res){
        //在执行传递自定义事件的同时,向跳转页面传递数据
       res.eventChannel.emit("getData",{
         name:"chen延年",
         age: 22
       })
      },
      //专门的配置项,用来接受跳转页面发来的数据,绑定自定义事件,并传递数据
      events:{
        giveData(arg1){
         console.log(arg1);
        }
      }
    })

2、发送方:

const eventChannel  = this.getOpenerEventChannel();
eventChannel.on("getData",function(res){
   console.log(res);//展示我们接收到的参数
 });
//同时将数据发送
 eventChannel.emit("giveData",{
  lover:"清漪"
});

(二)数据总线

像上面分析的那样,如果需要交换数据的组件并不相临为父子组件,关系比较复杂时,一层一层传递数据中间不需要这些数据的组件就相当于白白当了一回工具,这样是极其浪费源的。所以就有下面这种思想

一个组件专门负责数据通信,负责数据的转发,发送方只需要将要发送的数据发送,想要接收到该条数据的组件,只需要根据事件名,就可以从数据中介中获取想要的数据。(所谓发布订阅模式)

两个通信的组件,同时被同一个页面引用。

1、首先我们要引入包pubsub-js(注:笔者是mac系统,sudo是为了把文件夹权限给到位):

sudo npm install pubsub-js

2、构建(前有所提)

3、在组件中引入,并绑定事件和数据(发送方)

import PubSub from "pubsub-js"
//要引入

methods:{
  giveData(){
    //定阅消息
    PubSub.publish("myEvent",{
      name:'陈大炮',
      age: 23
    })
 }
}
<button type="primary" bind:tap="giveData">发送数据到组件scanyou</button>

4、数据接收方(默认引入pubsub包)

lifetimes: {
    //接受消息
   attached(){
    //接受发布者的消息
    PubSub.subscribe("myEvent",(msg,data)=>{
      console.log(msg,data);
      this.setData({
        name:data.name,
      })
    })
  }
  }
<text>孩子的名字是:{{name}}</text>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/628684.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

三无跨考,上岸热门211?

这个系列会邀请上岸学长学姐进行经验分享~ 今天分享经验的同学也是梦马班的学员&#xff0c;一战高分上岸福州大学&#xff01; 经验分享 一战零基础跨考福州大学866&#xff0c;初试395&#xff0c;信号141&#xff0c;最后本部录取排名前十。各位要报考福州大学的学弟学妹…

Win7远程桌面连接不上:原因及专业解决方案

Win7远程桌面连接作为一种方便的工具&#xff0c;使得用户可以从一台计算机远程访问和操作另一台计算机。然而&#xff0c;有时用户可能会遇到Win7远程桌面连接不上的情况&#xff0c;这可能是由于多种原因导致的。 一、原因分析 1. 网络设置问题&#xff1a;确保计算机与远程…

SpringBoot之远程调用的三大方式

为什么要使用远程调用&#xff1f; SpringBoot不仅继承了Spring框架原有的优秀特性&#xff0c;而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。在Spring-Boot项目开发中&#xff0c;存在着本模块的代码需要访问外面模块接口&#xff0c;或外部url链接的需求…

国网645协议报文解析软件

本文分享一款支持国网DL645-2007规约的报文解析软件&#xff0c; 链接: https://pan.baidu.com/s/1ngbBG-yL8ucRWLDflqzEnQ 提取码: y1de 主界面如下图所示&#xff1a; 本解析软件同时内嵌规约文档&#xff0c;支持一键打开文档&#xff0c;功能如下&#xff1a; 同时支持模…

SAP CS07复制BOM简介

在比较大型的集团公司中会应用到这样一个场景,所有的BOM都是由总部研发统一管控,然后在下发到下属的工厂进行生产,当发生变更的时候BOM也是会随之进行变更。 同样的在相同的两家工厂中,使用的是一套的设计方案,并且当物料发起变更的时候BOM也要随之进行变更处理。 在对BO…

【软件的安装与基本设置】AD21软件的PCB规则设置

在绘制PCB之前&#xff0c;要进行规则的创建&#xff0c;因为在绘制PCB的过程中&#xff0c;难免会出现很多错误&#xff0c;所以需要先对绘制PCB创建规则&#xff0c;即所有的打孔&#xff0c;走线&#xff0c;铺铜都要基于电气性能规则去设计&#xff0c;等到后期&#xff0c…

win10共享文件夹到ubuntu22

win10共享文件夹 新建用户 新建用户、设置密码。避免共享给EveryOne&#xff0c;导致隐私问题。 点击左下角的开始菜单&#xff0c;选择“设置”&#xff08;WinI&#xff09;打开设置窗口。在设置窗口中&#xff0c;搜索或直接点击“账户”进入账户设置。在账户设置中&…

Android Compose 五:常用组件 TextField

1、基本使用 1.1 随便用用 TextField(value "吃吃吃", onValueChange {})结果 点击输入框可以弹出软键盘光标显示正常 到文字最后位置文字 “吃吃吃” 无法删除输入文本无法变更 1.2 使用 val text remember {mutableStateOf("这一个输入框") } Te…

微信小程序如何变现

微信小程序有多种变现方式&#xff0c;以下是一些主要的方法&#xff1a; 广告变现&#xff1a;在小程序中嵌入广告&#xff0c;通过点击、曝光等手段获取收益。这是一种非常普遍的变现方式&#xff0c;尤其适合流量较大、用户活跃度较高的小程序。 电商变现&#xff1a;通过…

Vitis Platform Methodology

Vitis Platform Methodology

2024年开抖店都需要做哪些准备?这些条件缺一不可

大家好&#xff0c;我是电商花花。 作为目前国内最受欢迎的短视频电商平台&#xff0c;抖音将成为众多创业者的首选平台。 在往年我们都知道抖音小店市场很多&#xff0c;红利很大&#xff0c;利润大&#xff0c;不少人都通过抖音小店实现了脱贫&#xff0c;也有部分上班族获…

品鉴中的礼仪习俗:如何遵循正确的红酒品鉴礼仪

在品鉴云仓酒庄雷盛红酒时&#xff0c;遵循正确的礼仪习俗不仅能展现个人的修养&#xff0c;还能更好地领略葡萄酒的风味。下面我们将探讨红酒品鉴中的礼仪习俗。 首先&#xff0c;当我们拿起酒杯时&#xff0c;应该注意不要晃动酒杯&#xff0c;以免扰动其中的酒液。同时&…

接口自动化-requests库

requests库是用来发送请求的库&#xff0c;本篇用来讲解requests库的基本使用。 1.安装requests库 pip install requests 2.requests库底层方法的调用逻辑 &#xff08;1&#xff09;get / post / put / delete 四种方法底层调用 request方法 注意&#xff1a;data和json都…

品鉴中的食物搭配:如何创造美味的红酒与食物组合

品鉴云仓酒庄雷盛红酒时&#xff0c;食物搭配是一个不可忽视的环节。通过巧妙的搭配&#xff0c;红酒与食物可以相互衬托&#xff0c;呈现出更加美妙的风味。下面就让我们一起探讨如何创造美味的红酒与食物组合。 首先&#xff0c;了解红酒与食物的搭配原则是关键。一般来说&a…

本特利330104-00-20-05-02-00振动监测输出模块在PLC系统中的应用与集成

本特利330104-00-20-05-02-00振动监测输出模块在PLC系统中的应用与集成 一、引言 在现代工业自动化领域中&#xff0c;机械设备的振动监测是确保设备稳定运行、预防故障发生的重要手段之一。本特利&#xff08;Bently Nevada&#xff09;作为全球知名的振动监测解决方案提供商…

flowable工作流设置审批人为指定角色+部门的实现方式

一、绘制流程图页面配置 1、指定固定审批角色组织的实现 如上图红框部分&#xff0c;需要修改此处为需求对应。比如此时红框不支持指定某个部门下的指定角色这种组合判断的审批人。则需要修改页面变成选完角色同时也选择上部门统一生成一个group标识。 修改完后&#xff0c;生…

Stable Diffusion基础界面介绍

SD是stable diffusion的简称&#xff0c;AI绘画的一个开源应用,&#xff08;不需要科学上网&#xff09;&#xff0c;目前使用的版本是B站UP秋葉aaaki整理的最终版。 安装教程详见 B站up主 秋葉aaaki&#xff0c;教程下有提供stable diffusion的下载链接。 安装必要的三个基础…

甲方运营工具——安天威胁情报中心每日热点事件爬取

一、背景 本次是采用python爬取安天威胁情报中心的每日热点事件,进行甲方内部威胁情报同步的这样一个需求开发。 界面及内容: 二、逐步实现 2.1、分析请求页面的数据来源 通过请求页面我们看到安天对于第三方引用这些内容的真实性等是不予负责的;我们看到该页面的数据来源…

物联网平台:连接万物的桥梁

物联网&#xff08;IoT&#xff0c;Internet of Things&#xff09;平台是物联网生态系统中的核心组件&#xff0c;它允许不同设备、传感器和服务之间进行通信和数据交换。随着技术的不断进步&#xff0c;物联网平台已经成为实现智能城市、智能家居、工业自动化等应用的关键技术…

Git使用(1):介绍、克隆、推送

一、介绍与安装 1、Git是什么&#xff1f; Git是目前世界上最先进的分布式版本控制系统。工作原理 / 流程&#xff1a; workspace&#xff1a;工作区Index / Stage&#xff1a;暂存区Repository&#xff1a;仓库区&#xff08;或本地仓库&#xff09;Remote&#xff1a;远程仓…