微信小程序(二)

目录

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 });
},

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五秒法则

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值