使用参数和setTimeout的Vue js方法

时间:2017-08-29 14:41:51

标签: javascript vue.js settimeout

我无法弄清楚为什么这段代码有效..

data: {
    return {
        userMinerals: 0,
        mineralsLimit: 1000,
        miners: 0,
        superMiner: 0,
        minerPrice: 10,
        superMinerPrice: 100,
        minersLimit: 10
    }
}
methods: {
    counter() {
        setInterval(() => {
            this.userMinerals += this.miners;

            if(this.checkLimit(this.userMinerals, this.mineralsLimit)) {
                this.userMinerals = this.mineralsLimit;
            }
        }, 100);
    },
    addMiner() {
        if (this.userMinerals >= this.minerPrice) {
            this.miners += 1;
            this.userMinerals -= this.minerPrice;
            this.counter();
        }
    }
}

..但如果我尝试将参数放入counter(),代码就会停止工作

methods: {
    counter(typeOfCredits) {
        setInterval(() => {
            typeOfCredits += this.miners;

            if(this.checkLimit(this.userMinerals, this.mineralsLimit)) {
                typeOfCredits = this.mineralsLimit;
            }
        }, 100);
    },
    addMiner() {
        if (this.userMinerals >= this.minerPrice) {
            this.miners += 1;
            this.userMinerals -= this.minerPrice;
            this.counter(this.userMinerals);
        }
    }
}

从控制台我可以看到typeOfCredits会按原样递增,但它不会更新视图中的值。 请求帮助

2 个答案:

答案 0 :(得分:0)

$ find . -type d -not -name "*wiki*" 是函数的参数。参数按值传递。修改它就像修改局部变量一样。

答案 1 :(得分:0)

您无法引用参数并希望它在外部更改,但您可以将引用传递给可以更改外部的对象。

var $this = this;
this.counter({
    get() { return $this.userMinerals },
    set(val) { $this.userMinerals = val }
});

然后在这样的计数器中使用

    counter(typeOfCredits) {
        setInterval(() => {
            typeOfCredits.set(typeOfCredits.get() + this.miners);

            if(this.checkLimit(this.userMinerals, this.mineralsLimit)) {
                typeOfCredits.set(this.mineralsLimit);
            }
        }, 100);
    },

jsfiddle