微信小程序中的坑

開發小程序過程當中會遇到不少坑,時間長了都忘記了,先把能想起來的先記下來,有空再補充。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。

相關文章
相關標籤/搜索