微信小程序中的坑

开发小程序过程当中会遇到不少坑,时间长了都忘记了,先把能想起来的先记下来,有空再补充。javascript

坑一:函数没有返回值java

先上代码:小程序

Page({
    data: {
        name:""
    },api

    onLoad: function (options) {
        var name = this.myFunc();
        this.setData({"name":name});
    },函数

    myFunc:function(){
        return "test";
    }
})this

之前写这段代码时发现name为undefined。无奈只能改为回调的方式:对象

Page({
    data: {
        name:""
    },ip

    onLoad: function (options) {
        var oThis = this;
        this.myFunc(function(name){
            oThis.setData({"name":name});
        });
    },开发

    myFunc:function(fn){
        fn("test");
    }
})io

坑二:Data中的数据必须用setData

贴代码:

Page({
    data: {
        cond:{
            pageIndex:0
        }
        
    },

    onLoad: function (options) {
        var oThis = this;
        var cond=this.data.cond;
        cond.pageIndex++;
        $.api("api路径",{pageindex:pageindex})
            .then(function(value){
                if( this.data.cond.pageIndex>0){
                    //do something
                    console.log("pageindex="+this.data.cond.pageIndex);
                }
            });
    }
})

原由是pageIndex只是查询参数,跟UI不要紧,因此不想用setData,而是直接修改。结果发现它的值根本没有变化,也就是对cond的引用不是引用,而是传值!当var cond=this.data.cond时,cond实际上是this.data.cond的副本,不是对象引用。

从坑中能够看出小程序的语法只是像javascript,其实彻底不是javascript。

相关文章
相关标签/搜索