如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
mvc思想
view层
home.wxml
model层
home.model.js
controller层
home.js
数据的加载与绑定
home模型的model层 class Home{ //构造函数 constructor(){ } getBannerDate(id,callBack){ wx.request({ url:'http://www.ccccccc'+id, method:'GET', success:function(res){ //console.log(res); callBack(res); } }) } } export{Home} ----------------------- home模型的controller类 import{Home} from 'home.model.js'; var home = new Home();//实例化Home Page({ data:{ }, //onload 页面初始化的小程序生命周期函数 onload:function(){ this._loadData(); }, _onload:function(){ var $id = 1; home.getBannerData(id,(res)=>{ console.log(res); }); //console.log(res); }, }) ----------------------- //构建请求基类----将wx.request 封装 根目录新建utils/Base.js import{Config} from '../utils/confgi.js'; class Base{ //构造方法 constructor(){ //this.baseRequestUrl = 'http:www.wanmgmingchang.com/api/v1/'//最好放入配置文件中 this.baseRequestUrl = Config.restUrl;//静态调用,不用实例化 } request(params){ var url = this.baseRequestUrl + params.url; if(!params.type){ params.type = 'GET; } wx.request({ url:url, data:params.data, method:params.type, header:{ 'content-type':'application/json', 'token': wx.getStorageSync('token') //令牌从小程序的缓存中读取 }, success:function(res){ //if(params.sCallback){ //params.sCallback(res.data); //} //与if上述if用法一样 params.sCallback&¶ms.sCallback(res) }, fail:function(err){ console.log(err); } }) } } export(Base); -------------------------- //新建配置文件 config.js class Config{ constructor(){ } } Config.restUrl = 'http:www.wanmgmingchang.com/api/v1/'; export{Config}; ----------------------- 使用基类后的model import {Base} from '../../utils/base.js'; class Home extends Base{ //构造函数 constructor(){ //调用基类的构造函数 super(); } getBannerDate(id,callback){ var params = { url: 'banner/'+id, sCallback:function(res){ callback && callback(res.item); } } } } export{Home}
将数据绑定到wxml 与 wxfor
没有dom 只有绑定 controller: this.setData({ 'bannerArr':res }) view: 数据绑定使用双花括号 <swiper indicator-dots="true" autoplay="true"> <bolck wx:for="{{bannerArr}}"> <swiper-item> <image src="{{item.image.url}}"></image> </swiper-item> </block> </swiper> ------------ theme调取 1.controller _onload:function(){ home.getThemeData((res)=>{ this.setData({ 'ThemeArr':res }) }); }, 2.model getThemeDate(callback){ var params = { url: 'theme?id=1,2,3', sCallback:function(data){ callback && callback(data); } } } 3.view <bolck wx:for="{{ThemeArr}}"> <image src="{{item.topic_img.url}}"></image> </block>
校验域名
模拟器:
项目---不校验https........
真机:
1.HTTPS
2.加入合法域名列表中
小程序后台---设置---服务器域名---request合法域名
处理异步回调函数
1. _onload:function(){ var $id = 1; var $data = home.getBannerData(id,this.callBack); //console.log(res); }, //处理异步结果接收 callBack:function(res){ //console.log(res); } 2. _onload:function(){ var $id = 1; var $data = home.getBannerData(id,(res)=>{ console.log(res); }); //console.log(res); },
wxss引入
@import "../......base.wxss";
wxif
<view wx:if="{{index==2}}"> ...... </view> <view wx:else> .......... </view>
模版
定义: <template name="products"> <view wx:for"{{products}}"> </view> </template> 引入: <import src="..........product.wxml" /> //加载 //<template is="products" data="{{productArr}}"> </template> <template is="products" data="{{products:productArr}}"> </template> 模版引进来了,样式并不会引进来,在...wxss中引入样式
全局样式
app.wxss
页面跳转 and 传递接收参数
<swiper indicator-dots="true" autoplay="true"> <bolck wx:for="{{bannerArr}}"> <swiper-item data-id1="{{item.key_word}}" data-name="{{item.name}}" bindtap="onProductsItemTap"> <image src="{{item.image.url}}"></image> </swiper-item> </block> </swiper> onProductsItemTap方法 Page({ onProductsItemTap:function(event){ var id = event.currentTarget.dataset.id1; --------- 基类定义 getDataSet(event,key){ return event.currentTarget.dataset[key]; } 使用 var id = home.getDataSet(event,'id1'); -------- wx.navigateTo({ url:'../product/product?id'+id ////////传递 }) } }) data-id中id可以换成自己设置的变量;例:data-id1 event获取中,,,,获取的是id1,没有前面的data- Page({ data:{}, onLoad:function(options){ var id = options.id; ////////接收 } })
窗口设置/tarbar设置
https://www.wangmingchang.com/3303.html
tarbar至少两个最多5个
tarbar上方的黑线: "borderStyle":"white"
动态设置导航栏标题
Page({ data:{}, onLoad:function(options){ var id = options.id; var data.name ='标题'; } onReady:function(){ wx.setNavigationBarTitle({ title:this.data.name, }) } })
商品详情
picker组件(选择数量)
<picker rang={{countArr}} bindchange="bindPickChange" class="{{product.stock==0?'disabled':''}}"> <text>{{productCount}}</text>//实时显示数量 </picker> data:{ countArr:[1,2,3,4,5,6], } bindPickChange:function(event){ var index = event.detail.value; var selectedCound = this.data.countsArr[index] this.setData({ productCount:selectedCount }) }
实时改变---使用数据绑定
自定义选项卡
<block wx:for="{{['商品详情','产品参数','售后保障']}}"> <view class="tabs-item" bindtap="onTabsItemTap" data-index="{{index}}"> {{item}} </view> </block> onTabsItemTap:function(event){ var index = product.getDataSet(event,'index'); this.setData({ currentTabsIndex:index }) } <view hidden=true></view> //hidden=true 隐藏
商品分类
小程序操作流程图