微信小程序(二)

目录

1、input标签

 一、表单绑定

1、数据绑定

2、输入获取

二、网络请求

1、介绍

2、注意

3、使用

4、基于Promise封装

三、自定义组件

1、创建

2、父向子组件通信

3、子向父组件通信

 4、生命周期

四、vant weapp组件库

1、配置

2、使用


进入本章前的拓展:

1、input标签

小程序的input标签新增了可以改变placeholder样式的属性

<view class="about-page">
  <input type="text" placeholder="请输入账号" placeholder-style="color:red" placeholder-class=""/>
</view>
.about-page{
  padding: 20rpx;
}
input{
  border: 2rpx solid #ccc;
}


 一、表单绑定

1、数据绑定

(1)格式:value="{{变量}}"

(2)区别:小程序与vue的数据绑定

①小程序使用【mustache语法】绑定表单标签的value,数据流向【变量=》标签】

②vue是v-model双向数据绑定方式,数据流向【变量=》标签】及【标签=》变量】

(3)使用:

about.wxml

<view class="about-page">
  <input type="text" placeholder="请输入账号" placeholder-style="color:red" value="{{account}}"/>
</view>

about.js 

data: {
  account:'默认',
},

(4)注意:

小程序value的属性值绑定要加插值符号{{}}


2、输入获取

(1)格式:bindinput="事件"

(2)使用:

about.wxml

<view class="about-page">
  <input type="text" placeholder="请输入账号" placeholder-style="color:red" value="{{account}}" bindinput="onValue"/>
</view>

about.js

data: {
  account:'默认',
},
onValue(e){
  console.log(e.detail.value);
},

(3)注意:

①直接赋值,虽然可以在终端实时输出改变数据,但是无法将实时数据显示到页面上

about.wxml

<view class="about-page">
  <input type="text" placeholder="请输入账号" placeholder-style="color:red" value="{{account}}" bindinput="onValue"/>
  输入框当前值:{{account}}
</view>

about.js

data: {
  account:'默认',
},
onValue(e){
  console.log(e.detail.value);
  this.data.account = e.detail.value
  console.log(this.data.account);
},

②小程序正确修改数据要放在this.setData({})中

onValue(e){
  console.log(e.detail.value);
  this.setData({
    account:e.detail.value
  })
  console.log(this.data.account);
},

(4)数据在对象内时

<view class="about-page">
  <input type="text" placeholder="请输入账号" placeholder-style="color:red" value="{{userInfo.username}}" bindinput="onValue"/>
  输入框当前值:{{userInfo.username}}
</view>
data: {
  userInfo:{
    username:'',
    password:''
  }
},
onValue(e){
  this.setData({
    ['userInfo.username']:e.detail.value
  })
},

(5)通用绑定封装

about.wxml

<view class="about-page">
  <input type="text" placeholder="请输入账号" placeholder-style="color:red" value="{{userInfo.username}}" bindinput="getValueInput" data-target="userInfo" data-key="username"/>
  当前账号:{{userInfo.username}}
  <input type="text" placeholder="请输入密码" placeholder-style="color:red" value="{{userInfo.password}}" bindinput="getValueInput" data-target="userInfo" data-key="password"/>
  当前密码:{{userInfo.password}}
</view>

about.js

data: {
  account:'默认',
  userInfo:{
    username:'',
    password:''
  }
},
getValueInput(e){
  console.log(e);
  // 解构赋值
  const {target,key} = e.currentTarget.dataset
  this.setData({
    [`${target}.${key}`]:e.detail.value
  })
},

二、网络请求

1、介绍

小程序通过 wx.request 函数发送请求

2、注意

若在开发过程中,请求域名非https协议,请在 右上角=>详情=>本地设置=>勾选【不校验合法域名】,否则将无法发送请求

3、使用

小编使用天行数据API为例子

天行数据TianAPI - 开发者API数据平台天行数据TianAPI开发者API数据平台天聚数行,在这里您可以免费且轻松的调用各种API数据接口用于系统软件、应用App、网站、小程序开发等。https://www.tianapi.com/(1)默认GET获取方式

①about.wxml

<view class="about-page">
  <button bindtap="getRequestApi">获取数据api</button>
</view>

②about.js 

getRequestApi(){
  wx.request({
    url: 'https://apis.tianapi.com/tiangou/index',
    method:'GET',
    data: { key:"a3828b7efb833ce8c26d05f10ed40e04" },
    // header: { /* 请求头 */ },
    success: res=>{
        /* 响应的回调 */
        console.log(res.data);
    },
    fail: err=>{
        /* 失败的回调 */
    }
})
},

(2)默认POST获取方式

about.js

getRequestApi(){
  wx.request({
    url: 'https://apis.tianapi.com/tiangou/index',
    method:'POST',
    data: { key:"a3828b7efb833ce8c26d05f10ed40e04" },
    header: { 'content-type':'application/x-www-form-urlencoded' },
    success: res=>{
        /* 响应的回调 */
        console.log(res.data);
    },
    fail: err=>{
        /* 失败的回调 */
    }
})
},

4、基于Promise封装

(1)在utils文件夹下新建request.js文件

// 导出一个方法
export default function (option) {
  // 设置、获取配置项
  const BASE_URL = ""
  // 解构赋值
  let { url = "", method = "GET", data = {}, header = {}, isToken = true/*默认为需要*/ } = option

  /* 请求拦截区域 */
  if (isToken) {
      // 根据接口token需求,对header添加Authorization属性
      header = {
          ...header, // 扩展运算,保留原header信息
          Authorization: wx.getStorageSync('token') // 加入token
      }
  }

  return new Promise((resolve, reject) => {
      wx.request({
          url: BASE_URL + url,
          method,
          data,
          header,
          success(res) {
              /* 响应拦截 */
              resolve(res.data) // 拆包,返回后端数据
          },
          fail(err) {
              reject(err)
          }
      })
  })
}

(2)创建api文件夹=》创建aboutApi.js=》

import instance from '../utils/request'

export function getMsg(data){
  return new instance({
    url:'/tiangou/index',
    method:"GET",
    data
  })
}

export function postMsg(data){
  return new instance({
    url:'/tiangou/index',
    method:"POSt",
    data,
    header:{
      'content-type':'application/x-www-form-urlencoded'
    }
  })
}

(3)回到about.js文件

//引入api文件
import {getMsg,postMsg} from "../../api/aboutApi.js"
getRequestApi(){
  // getMsg({key:'a3828b7efb833ce8c26d05f10ed40e04'}).then(res=>{
  //   console.log(res);
  // })
  postMsg({key:'a3828b7efb833ce8c26d05f10ed40e04'}).then(res=>{
    console.log(res);
  })
},

三、自定义组件

1、创建

(1)创建component文件夹=》创建dialog文件夹=》创建Component组件index文件

2、父向子组件通信

(1)子级index.js文件设置properties,类似vue2中的父子组件传参使用方法props

properties: {
    title:{
      type:String,
      value:'默认',
    }
  },

(2)父级about.json文件注册组件"dialog-tag":"/component/dialog/index"

{
  "component": true,
  "usingComponents": {
    "dialog-tag":"/component/dialog/index"
  }
}

(3)使用组件,在父级about.wxml文件编写,使其显示到页面上

<dialog-tag title='123'></dialog-tag>

3、子向父组件通信

(1)子级index.wxml文件设置点击事件的按钮

<view class="about-page">
  <dialog-tag title='123'></dialog-tag>
  <button bindtap="onclick">点击</button>
</view>

(2)子级index.js设置要传递的参数及点击事件

data: {
    msg:'给父级的变量',
  },
 methods: {
    onclick(){
      this.triggerEvent("myevent",this.data.msg)
    }
  }

(3)父级about.wxml添加连接事件

<view class="about-page">
  <dialog-tag title='' bindmyevent="sonClick"></dialog-tag>
</view>

(4)父级about.js点击事件获取子级内容

sonClick(e){
  console.log(e);
},

 4、生命周期

(1)基本生命周期输出顺序

/**
   * 生命周期函数--监听页面加载
   * 页面第一次加载
   */
  onLoad(options) {
    console.log(1);
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    console.log(2);
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    console.log(3);
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    console.log(4);
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    console.log(5);
  },

(2)更多详细生命周期看文档

组件生命周期 | 微信开放文档


四、vant weapp组件库

1、配置

(1)新建终端=》npm init=》一直回车即可

(2)下载

npm install --production

(3)下载vant

①文档:Vant Weapp - 轻量、可靠的小程序 UI 组件库

②输入下载语句

npm i @vant/weapp -S --production

(4)去除默认样式,修改默认值配置项

①将 app.json 中的 "style": "v2" 去除

②修改project.config.json,查询packNpmManually属性后修改为true

③修改project.config.json,查询packNpmRelationList添加

{
    "packageJsonPath": "./package.json",
    "miniprogramNpmDistDir": "./miniprogram/"
}

(5)构建npm

①点击工具=》构建npm=》出现如下图,即构建成功

②如果构建失败可以看这个文章的解决办法

小程序npm构建时发生错误Error: C:\Users\13914\WeChatProjects\miniprogram-2\miniprogram\ 未找到_沈思齐的博客-CSDN博客


2、使用

(1)全局app.json中导入以下代码

"usingComponents": {
  "van-button": "@vant/weapp/button/index"
},

(2)当每个页面需要使用弹出层时,就在对应页面的json文件中引入对应内容

"usingComponents": {
  "van-popup": "@vant/weapp/popup/index"
}
<van-cell title="展示弹出层" is-link bind:click="showPopup" />123s
<van-popup
  show="{{ show }}"
  position="top"
  custom-style="height: 20%;"
  bind:close="onClose"
/>
data: {
  show: true,
},
showPopup() {
  this.setData({ show: true });
},
onClose() {
  this.setData({ show: false });
},

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

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

相关文章

Git❀详细使用教程

Git❀详细使用教程 一、Git简介1.1 什么是Git&#xff1f;1.2 Git的特点1.3 集中式与分布式的区别&#xff1f;1.4 Git工作流程图 二、Git安装与常用命令2.1 Git环境配置2.1.1 下载与安装2.1.2 基本配置2.1.3 为常用指令设置别名&#xff08;可选&#xff09;2.1.4 解决GitBash…

jsonschema networknt json-schema-validator 高级能力json 数字很大时, 变成什么类型

入参校验产品化 schema_个人渣记录仅为自己搜索用的博客-CSDN博客 自动变成了bigInteger类型. 哪怕你的jsonSchema 配置的是integer , 不冲突.

AlGaN基深紫外FP激光器仿真模型及材料信息数据库有何用途?

波长范围为UVC波段&#xff08;100-280 nm&#xff09;的深紫外FP&#xff08;Fabry-Pero&#xff0c;法布里和珀罗是两位法国的科学家&#xff09;激光器可广泛应用于数据通信、光通信、3D打印、材料加工、显示与照明、激光雷达、人脸/手势识别、医疗和表面监测等领域。FP激光…

2023年Q2京东冰箱行业品牌销售排行榜(京东销售数据分析)

近年我国的冰箱零售呈波动变化的趋势&#xff0c;由于冰箱市场趋于饱和&#xff0c;因此消费者对冰箱的需求逐渐变为替换需求&#xff0c;这也进一步推动了产品的更新迭代。接下来结合具体数据&#xff0c;我们来分析一下2023年Q2冰箱行业的销售详情。 根据鲸参谋电商数据分析平…

SpringBoot+Vue实现的高校图书馆管理系统

项目描述&#xff1a;这是一个基于SpringBootVue框架开发的高校图书馆管理系统。首先&#xff0c;这是一个前后端分离的项目&#xff0c;代码简洁规范&#xff0c;注释说明详细&#xff0c;易于理解和学习。其次&#xff0c;这项目功能丰富&#xff0c;具有一个高校图书馆管理系…

6.2.5 网络基本服务----动态主机配置协议DHCP

6.2.5 网络基本服务----动态主机配置协议DHCP 动态主机配置协议允许一台计算机加入新的网络时可自动获取网络配置信息&#xff0c;不用人工参与。连网的计算机需要配置的参数包括 IP地址子网掩码默认路由器的IP地址域名服务器IP地址 DHCP与DNS、FTP、Telnet一样也采用客户服…

Lua脚本本地调试

这里主要使用日志的方式进行debug 环境依赖 项目对openresty包的依赖比较高&#xff0c;所以环境基础都在openresty下进行 openresty的使用 openresty下载地址 下载完成后解压&#xff0c;具体使用方式和nginx没有什么区别&#xff0c;主要依赖文件是一下几个 nginx.exe …

搬家送货小程序开发源码定制一键报警实时定位路线规划

1.货物信息录入&#xff1a; 用户可以输入货物的名称、数量、重量、尺寸等信息。 2.路线选择&#xff1a; 用户可以选择起始地点和目的地点&#xff0c;并根据需求选择最佳路线。 提供地图服务或第三方路径规划服务&#xff0c;以帮助用户确定最佳路线。 3.车辆选择&#…

基于深度学习的高精度鸡蛋检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度鸡蛋检测识别系统可用于日常生活中或野外来检测与定位鸡蛋目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的鸡蛋目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

跨域问题解决

由于同源策略&#xff0c;需要协议&#xff0c;域名&#xff0c;端口三个都相同才能进行访问&#xff0c;是一种浏览器的保护策略 CORS:Cross Origin Resource Sharing SpringBoot 项目中解决跨域 1.在目标方法中加入CrossOrigin注解 2.添加一种过滤器 分别是允许哪些域&#…

ffmpeg2段视频合成一段

查看分辨率 帧率和编码器 ffprobe -v error -select_streams v:0 -show_entries streamcodec_name,width,height,avg_frame_rate -of defaultnoprint_wrappers1 rs2.mp4得到&#xff0c;编码器&#xff0c;分辨率&#xff0c;还有帧率 codec_nameh264 width1920 height1080 avg…

Linux 发行版 Gentoo 存在重大漏洞

网络安全公司 SonarSource 在日前研究中发现&#xff0c;Gentoo Linux 发行版中存在漏洞 CVE-2023-28424&#xff0c;黑客可以利用该漏洞进行 SQL 注入攻击。 研究人员从 GentooLinux 的 Soko 搜索组件中找到了这个漏洞。该漏洞的 CVSS 风险评分为 9.1&#xff0c;属于特别重大…

Flutter 仿抖音、豆瓣、知乎、番茄小说的评论弹窗开发实践

最近用flutter做了一个评论弹窗的功能&#xff0c;本来以为很简单的烂大街的一个功能&#xff0c;结果却遇到了不少的问题&#xff0c;而且这些问题我觉得很有意义&#xff0c;以至于我觉得我如果分享出来可能会对其他人很有帮助。 要做一件事情可能会很容易&#xff0c;但做好…

springboot之配置文件加载

springboot启动流程参考。Springboot总结。本内容主要解析里面的配置文件的加载过程。 springboot资源加载 入口。SpringApplication#run 我们知道&#xff0c;run方法是构建容器的过程。里面有一个方法&#xff1a;prepareEnvironment。用于构建环境组件Environment&#xf…

cocos2d-js中jsc逆向为js

1.下载脚本https://github.com/tablis/jsc-decompile-mozjs-34 2.安装php7以上的版本 ubuntu $ sudo apt install php7.0 mac $ brew install php7.0 windows just google an binary one 查看php安装的版本这里mac电脑为例子: 输入:php -v 只要7以上的版本即可 3.cd到…

http协议(二)

欢迎来到南方有乔木的博客&#xff01;&#xff01;&#xff01; 博主主页&#xff1a;点击点击&#xff01;戳一戳&#xff01;&#xff01; 博主名:南方有乔木呀 博主简介&#xff1a; 一名在校大学生&#xff0c;正在努力学习Java语言编程。穷且意坚&#xff0c;不坠青云…

Go语言基础教程:变量、基本数据类型、输出、注释、运算符、if-else条件判断、函数

文章目录 一、变量的使用1.1 定义变量1.2 常量1.3 变量的赋值与内存相关 二、变量基本类型2.1 有符号整型2.2 无符号整型2.3 string类型2.4 bool类型 三、输出3.1 常用打印功能3.2 格式化输出3.3 内置输出方法与fmt的区别 四、注释五、运算符六、条件语句6.1 基本使用6.2 条件嵌…

ncnn源码阅读(三)----数据结构Mat

文章目录 数据结构Mat成员变量成员方法构造函数1、普通构造函数2、外部数据指针构造函数3、拷贝构造函数和opertor 深拷贝函数类型转换引用计数的实现其他数据操作函数 数据结构Mat 个人认为一个框架中的比较核心的两个点&#xff0c;一个是数据结构&#xff0c;一个任务调度…

【NLP】Transformer模型原理(2)

接上文 【NLP】Transformer模型原理(1) 六、零层的transformer 观看涵盖与本节类似内容的视频:0 层理论 在进入更复杂的模型之前,简要考虑一下“零层”变压器很有用。这样的模型获取一个令牌,嵌入它,解嵌它以生成预测下一个令牌的对数: ​

AttributeError: module ‘torch.nn‘ has no attribute ‘module‘

import torch import torch.nn as nnclass LinearModel(nn.Module):def _init_(self,ndim):super(LinearModel,self)._init_()self.ndimndimself.weightnn.Parameter(torch.randn(ndim,1))#定义权重self.biasnn.Parameter(torch.randn(1)) #定义偏置def forward(self,x):# y …