微信小程序入门踩坑记(妥妥的干货,新手快快看过来)

初次上手微信小程序,各种踩坑各种百度,草草扫过官网的文字,呃。。。。表示记不住不想看,然后看了一本入门基础,

诺,就这本啦(链接:https://pan.baidu.com/s/15hKlDNpowUdNvMEZ9mHCHQ  密码:if8y),是这本书的实例深深吸引了我,快速看完前面的基础然后开始了后面的实例,很棒,GitHub上有完整的代码,然后,我就抄了下来,还是觉得一无所获。然后我发现个好物——聚合数据,上面有一些免费的接口,虽然简单,但是可以拿来练手哦~

好了,不多说了,踩坑之旅正式开始(下面是从vue的过来的转变之旅):

首先,想做个稍微好看点的页面,用个icon组件啥的,结果icon里面就那么几个图标,果断放弃,改用background用本地图片,写完之后图片不能显示,百度上说不能用本地路径,要改成服务的路径,但是我们这里没有服务,最后就用image标签试了试,image标签用本地路径就可以啦~

其次,就是请求接口,(1)在onLoad(生命周期函数--监听页面加载)生命周期中完成;(2)这里有this指向的问题,要先将this赋给that,还有一种是用ES6的箭头函数,这个自己找资料看,这里就不说了;(3)接口请求要用到腾讯在API里面封装好的函数wx.request,里面的url就不再多说了,和平常用的差不多,我要说说header,header在get请求时可以不要,但是在post请求时一定要加上,否则提交数据是为空的;(4)接下来就是数据请求成功后要做的事了,看下面的success就大概知道了,这里和vue不同的是给data里定义的变量赋值,小程序的赋值不能用等号,要用setData,还有一点要说一下,在js文件里用data里的数据,不像vue那样是this.message,而是要用this.data.message,这里比vue多一层data;(5)做完这些你会发现没请求到数据还报错了,这时候将小程序开发工具里右上角的详情点开,在最后一行不校验合法域名前打上勾,小程序要用https协议,http不可以,深层次的内容自己了解

       

data: {
    typeLabel:[],
    labelSign:0,
    messageList:[],
    type:'top'
  },

onLoad: function (options) {
    var that = this;
    wx.request({
      url: 'http://v.juhe.cn/toutiao/index?type='+this.data.type+'&key=99ec773a36c52f94aede4f45a9769d51',
      header: {
        'content-type': 'application/json'
      },
      success: function(res) {
        that.setData({
          messageList:res.data.result.data
        })
      },
    })
  },

接口请求成功了,接着要说事件了,这里我就说说点击事件和input框获取数据的事件。

(一)点击事件:点击事件写法没什么,看看API或者随便百度下就知道了,这里用bindtap,重点在参数的传递上,不能写成bindtap="search(data)",在括号里还传个参数啥的,要写成bindtap="search"这样,那么要传参数怎么办?如果是一个参数,可以在用id传递,像下面那样,取的时候可以打印一下事件的参数就知道了,在currentTarget里面有个id,就是通过id传过来的参数。那么一个参数通过id传,多个参数呢?多个参数可以通过data-hi来传递,得到的数据是以字符串的形式,参数间用逗号隔开。

<text wx:for="{{typeLabel}}" id="{{index}}" data-hi="{{item.type}},param1,param2" bindtap="choseLabel">{{item.name}}</text>


choseLabel(e){
    console.log(e)
    this.setData({
      labelSign: e.currentTarget.id
    })
  },

(二)input框获取数据的事件:这里用到的是bindinput,这里其实没什么难的,只是刚从vue过来,一时间尽想着双向绑定,小纠结了一会。说到这就要说说,小程序中没有双向绑定这么一说,但是通过bindinput其实也是可以实现的,在userNameFn中拿到input框中输入的数据,用setData赋给data中的变量,在页面上用{{}}使用变量,就可以了。这里的bindinput是改变就触发,所以在input框中输入的时候页面是动态变化的,如果不希望这样,那就定义两个变量,一个存input值,另一个等到其他事件触发的时候再把存input值的付给它就可以啦~

<input class='search' placeholder='输入名称' type="text" bindinput='userNameFn'></input>


userNameFn: function (event) {
    this.setData({
      inputCity: event.detail.value
    })
  },

好了,今天就先说到这,知识没什么深度,但是希望能对刚入门的新手有一点帮助

扫描二维码关注公众号,回复: 8631861 查看本文章
发布了15 篇原创文章 · 获赞 0 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/deciduous_leaves/article/details/100099798