原生小程序中模板自定义组件事件

news2025/2/24 6:50:39

封装request.js请求文件


目的:优化代码结构以及后期项目版本迭代和维护方便,提升代码的执行速度。

假设:在原生page中使用基本写法创建ajax请求

 //发送请求了
      wx.request({
          url:"",
          method:"",
          data:"",
          success(res){
            //写业务操做代码

          },
          fail(err){

          }
      });

 //第一点:page界面业务操做代码混乱,代码多层嵌套。
 //第二点:多次书写重复代码造成代码冗余,造成小程序珠宝太大,导致原生小程序不能上线(最新版本主包v奥大小为1.5M)

新建思想:对内置api进行二次封装。

新建封装结构:

  1. page界面业务代码

  1. 网络请求层 network目录

  1. 在网路目录下封装项目的api接口文件

  1. 在utils工具类(公用业务)二次封装网络请求(wx.request)

需要了解原生小程序中如何进行代码模块化封装

查官方文档:
var foo = "'hello world' from tools.wxs";
var bar = function (d) {
  return d;
}
module.exports = {
  FOO: foo,
  bar: bar,
};
module.exports.msg = "some msg";
//引入
var tools = require("./tools.wxs");

二次封装网络文件

//request 二次封装文件
//请求方式
//接口是否认证
//接口是否传参
//请求头设置不一样  content-type
//定义基本路径
let baseUrl = "http://xawn.f3322.net:10004/"
//定义header
let header = {
    "Content-Type": "application/json"
};
//封装缓存读取方法
function getStorage(key) {
    return wx.getStorageSync(key);
}
/* 
封装的请求request
*/
function Request(url, data, method) {
    if (!method) {
        method = "get";
    }
    //读取用户的令牌值  token
    let token = getStorage('_token');
    if (token) {
        header['token'] = token;
    }
    return new Promise((resolve, reject) => {
        //执行ajax请求
        wx.request({
            method: method,
            url: `${baseUrl}${url}`,
            data: data,
            header: header,
            success(res) {
                //promise成功响应数据
                resolve(res);
            },
            fail(err) {
                reject(err);
            }
        })
    })
}
module.exports =

wxml语法


wx:if  条件判断
<view wx:if="{{length > 5}}"> 1 </view>
<view wx:elif="{{length > 2}}"> 2 </view>
<view wx:else> 3 </view>

wxml使用模板:
定义模板: 使用name属性即可
<!-- 创建模板 -->
<template name="img">
  <image src=""></image>
</template>
<!-- video模板 -->
<template name="vide">
  <video src=""></video>
</template>
在网页中使用:
 <template is="img">
 </template>

 模板中使用数据需要用data属性传递
 将模板所需要的 data 传入
 //使用条件编译  结合数据返的type类型
   <block wx:for="{{item.media}}" wx:for-item="items" wx:key="indexs" wx:for-index="indexs">
            <template wx:if="{{item.type==1}}" is="img" data="{{items}}">
            </template>
            <template wx:else is="vide" data="{{items}}">
            </template>
   </block>

wxml 中template封装


官方文档给出了引入template模板方法

WXML 提供两种文件引用方式import和include。

在需要使用template的Page界面中,使用import组件引入外部定义的template模板

<import src="item.wxml"/>
<template is="item" data="{{text: 'forbar'}}"/>

在使用的page界面

使用

template模板仅限网页模板结构渲染。

将模板的css公用抽离在使用模板的page中引入

@import "common.wxss";
使用@import语句可以导入外联样式表,@import后跟需要导入的外联样式表的相对路径,用;表示语句结束。

原生小程序中的自定义组件


自定义组件由json wxml wxss js 4个文件组成

修改自定义组件的json文件

直接在项目尚新建component组件可以直接生成component组件。

生成的组件内置Component构造器

// component/swiper/swiper.js
使用组件的构造器生成组件的代码区域
Component({
    /**
     * 组件的属性列表
     * 等价vue组件的props
     */
    properties: {

    },

    /**
     * 组件的初始数据
     * 组件自身的数据
     */
    data: {

    },

    /**
     * 组件的方法列表
     */
    methods: {

    }
})

自定义组件在Page界面中使用


Page界面中的json配置文件:

在app.json配置文件中可以全局注册自定义组件

在项目中msg的界面下配置局部注册

在msgwxml界面中使用自定义组件

全局注册:

任何Page界面都可以使用。

自定义组件中父组件给子组件传递值


1.在自定义组件中先约束props传值

properties:{
     banner:Array,//直接定义数据类型
     bannerList:{
       type:Array,//类型
       value:[],//定义默认值
     }
}

父组件给子组件传值,子组件中默认的this为当前组件实例,并且组件的props默认关联到data数据源。

结论是:自定义组件的rops可以在组件的wxml中直接使用变量。

原生小程序如何操做事件


  • 事件是视图层到逻辑层的通讯方式。

  • 事件可以将用户的行为反馈到逻辑层进行处理。

  • 事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。

原生小程序事件前缀

bind****
bindtap====click
bindlongtag

事件处理函数的e

事件点击传值

事件处理函数中在e.currentTarget上获取

// 跳转页面 类似编程导航
    // 跳转page下的界面
    // navigateTo 跳转可以写代码参数
    wx.navigateTo({
      url: `/pages/type/type?id=${id}`,
    })
    // 跳转tabbar
    //switchTab不能携带数据
    // wx.switchTab({
    //   url: '/pages/my/my',
    // })

自定义组件中如何添加自定义事件


在组件上声明自定义事件

<component-tag-name bindmyevent="onMyEvent" />
bind****(自定义名称)

在子组件中对应的业务代码位置触发

子组件触发自定义事件传值

父组件接收

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据分片(mycat)

1. 数据分片概念&#xff1a; 1.1. 分库分表 什么是分库分表&#xff1a; 将存放在一台数据库服务器中的数据&#xff0c;按照特定方式&#xff08;指的是程序开发的算法&#xff09;进行拆分&#xff0c;分散存放到多台数据库服务器中&#xff0c;以达到分散单台服务器负载的…

Vue使用distpicker插件实现省市级下拉框三级联动

前言 这几天做项目&#xff0c;想着用一个全国省市区插件&#xff0c;之前就知道有几种&#xff0c;比如通过JSON文件生成对应的区域下拉框&#xff0c;element-china-are插件&#xff0c;包括distpicker插件 今天主要介绍的是如何使用distpicker插件实现省市级三联跳动 官网…

2023年100道最新Android面试题,常见面试题及答案汇总

除了需要掌握牢固的专业技术之外&#xff0c;还需要刷更多的面试去在众多的面试者中杀出重围。小编特意整理了100道Android面试题&#xff0c;送给大家&#xff0c;希望大家都能顺利通过面试&#xff0c;拿下高薪。赶紧拿去吧~~文末有答案Q1.组件化和arouter原理Q2.自定义view&…

钣金行业mes解决方案,缩短产品在制周期

钣金加工行业具有多品种、小批量离散制造行业的典型特点。一些常见的下料车间、备料车间、冲压车间、冲剪生产线等。一般来说&#xff0c;核心业务是钣金加工的生产单位。 一般来说&#xff0c;与大规模生产相比&#xff0c;这种生产方式效率低、成本高&#xff0c;自动化难度…

ur3+robotiq ft sensor+robotiq 2f 140配置gazebo仿真环境

ur3robotiq ft sensorrobotiq 2f 140配置gazebo仿真环境 搭建环境&#xff1a; ubuntu: 20.04 ros: Nonetic sensor: robotiq_ft300 gripper: robotiq_2f_140_gripper UR: UR3 通过上一篇博客配置好ur3、力传感器和robotiq夹爪的rviz仿真环境后&#xff0c;现在来配置一下对…

【读书笔记】《深入浅出数据分析》第一章 分解数据

阅读第一章后&#xff0c;觉得本章重点不是在“分解数据”上&#xff0c;而是在对分析流程&#xff0c;分析步骤的引导。 1&#xff0c;确定问题 当业务方或者leader给你提诉求时&#xff0c;往往都是会比较模糊&#xff0c;他们会简单的说下诉求&#xff0c;然后给你一些数据…

Spark介绍

1、Spark是什么?类似与Hadoop的MapReduce的计算框架,基于map和reduce实现分布式计算,对比MapReduce可有效减少落盘次数,增加效率.任务之间通信交互不需要落盘,仅在shuffle时需要重新将数据排序分区落盘.Spark的缓存功能更加高效&#xff0c;特别是在SparkSQL中,一般是以列式存…

学习.NET MAUI Blazor(六)、基于OpenAI接口的伪ChatGPT

ChatGPT不用介绍了。自从1月份开始到现在&#xff0c;火的不得了。网络上也充斥着各种教程&#xff0c;甚至还有号称是ChatGPT国内版的。那么ChatGPT到底有么有开放的API接口&#xff0c;那些打着ChatGPT的应用到底是如何实现的呢&#xff1f; 其实&#xff0c;国内环境虽然无法…

day49【代码随想录】动态规划之最长公共子序列、不相交的线、最大子序和、判断子序列

文章目录前言一、最长公共子序列&#xff08;力扣1143&#xff09;二、不相交的线&#xff08;力扣1035&#xff09;三、最大子序和&#xff08;力扣53&#xff09;四、判断子序列&#xff08;力扣392&#xff09;前言 1、最长公共子序列 2、不相交的线 3、最大子序和 4、判断…

C++012-C++一维数组

文章目录C012-C一维数组一维数组目标一维数组定义一维数组初始化一维数组输入输出题目描述 车厢货物**需要查看指定车厢的货物****倒着输出**题目描述 与指定数字相同的数的个数排序选择排序实现题目描述 成绩排名成绩第一名和最后一名在线练习&#xff1a;总结C012-C一维数组 …

推荐几个好玩的AI工具和办公效率网站!

1.copymonkey.ai CopyMonkey可以帮助用户生成和优化亚马逊商品列表文案&#xff0c;分析竞争对手&#xff0c;帮助推动销售。 2.bertha.ai Bertha可以帮助用户使用AI创建高质量的营销文案和图片&#xff0c;同时&#xff0c;帮助客户优化业务流程&#xff0c;提高效率。 3.cr…

UDP端口转发

sokit是一个开源项目&#xff0c;是一个TCP / UDP 测试工具,用来接收,发送,转发TCP或UDP数据包。 项目地址: http://code.google.com/p/sokit/、https://github.com/sinpolib/sokit。 中文版下载地址&#xff1a;https://download.csdn.net/download/android_cai_niao/874728…

LeetCode_动态规划_困难_1326.灌溉花园的最少水龙头数目

目录1.题目2.思路3.代码实现&#xff08;Java&#xff09;1.题目 在 x 轴上有一个一维的花园。花园长度为 n&#xff0c;从点 0 开始&#xff0c;到点 n 结束。 花园里总共有 n 1 个水龙头&#xff0c;分别位于 [0, 1, …, n] 。 给你一个整数 n 和一个长度为 n 1 的整数数…

LC-1326. 灌溉花园的最少水龙头数目(区间合并计算问题 LC-1024、LC-55、LC-45)

区间合并计算问题 文章目录区间合并计算问题[1326. 灌溉花园的最少水龙头数目](https://leetcode.cn/problems/minimum-number-of-taps-to-open-to-water-a-garden/)贪心[1024. 视频拼接](https://leetcode.cn/problems/video-stitching/)[55. 跳跃游戏](https://leetcode.cn/p…

感知数据温度,聚焦海量冷数据存储难题

在信息科技高速发展的背景之下&#xff0c;海量数据已经让拥有者和管理者应接不暇&#xff0c;根据IDC发布的《数据时代2025》预测&#xff0c;全球数据圈&#xff08;数据圈代表每年被创建、采集或是复制的数据集合&#xff09;将从2018 年的32ZB增至2025年的175ZB。2018年&am…

【学习记录】IMU内参标定:Allan方差与代码

本文仅用于记录自己学习IMU内参标定过程中的一些总结。 参考 关于IMU参数&#xff1a; 死磕陀螺仪之(一)陀螺仪参数意义以及工程转换 关于Allan方差&#xff1a; 多传感器融合定位理论基础&#xff08;三&#xff09;&#xff1a;惯性器件误差分析 IMU噪声参数辨识-艾伦方差…

虹科方案|从 uCPE 到成熟的边缘计算平台

基于开放硬件平台&#xff0c;通用客户端设备 (uCPE) 支持快速添加、集成或删除任意数量的集中管理虚拟功能。 为了增加收入并保持竞争优势&#xff0c;托管服务提供商 (MSP) 和企业正在部署 uCPE 以增强业务敏捷性、加速新服务的引入并提高运营效率。最初&#xff0c;uCPE被部…

防护设备检测实验室建设完整方案SICOLAB

防护设备检测实验室建造布局方案SICOLAB一、防护设备检测实验室通常需要划分为几个功能区域&#xff0c;包括&#xff1a;1、样品准备区&#xff1a;用于样品的接收、处理、准备等工作&#xff0c;通常包括样品接收台、洗手池、样品切割机等设备。2、实验操作区&#xff1a;用于…

【Linux】简介以及安装(一)

目录 1. 前言 1.1 什么是Linux 1.2 为什么要学Linux 1.3 学完Linux能干什么 2. Linux简介 2.1 主流操作系统 2.2 Linux发展历史 2.3 Linux系统版本 3. Linux安装 3.1 安装方式介绍 3.2 安装VMware 3.3 安装Linux 3.4 网卡设置 3.5 安装SSH连接工具 3.6 Linux目…

Android RxJava框架源码解析(四)

目录一、观察者Observer创建过程二、被观察者Observable创建过程三、subscribe订阅过程四、map操作符五、线程切换原理简单示例1&#xff1a; private Disposable mDisposable; Observable.create(new ObservableOnSubscribe<String>() {Overridepublic void subscribe(…