【问题标题】:Call nested method in vuejs在 vuejs 中调用嵌套方法
【发布时间】:2019-10-31 03:27:09
【问题描述】:

在我的 vuejs 应用程序中,我有 2 种方法。如果我这样写method1,它不会运行。

method1: function(param1, param2){
    // I can log param1 in here
    thirdLib.debounce(function(param1, params2){
        // It doesn't run into here
        // Do something
    }, 100)
},
method2: function(){
    this.method1(param1, param2);
}

但是,如果我将 method1 更改为此,它可以顺利运行:

method1: thirdLib.debounce(function(param1, params2){
            // Do something
        }, 100)

我想知道为什么会这样?如果我想像第一个一样编写方法1,我该怎么做? 我的vue版本是3.8.2

【问题讨论】:

    标签: javascript vue.js vuejs2


    【解决方案1】:

    没有确切地看到 thirdlib 是什么,这是因为 thirdLib.debounce() 创建了一个 debounce 方法,它没有执行它。所以在你的第一个例子中,你在哪里执行它?你不是你只是宣布它并把它扔掉。但是因为您希望每次都调用同一个 debounce 实例(这就是它知道 debounce 的方式),所以我什至认为如果您确实执行第一个示例,它不会作为 debounce 工作,因为每次调用都会创建一个新的去抖动实例。

    所以这实际上更像是一个 Javascript 的东西,而不是一个 vue 的东西。

    【讨论】:

    • 所以你的意思是thirdLib.debounce() 只是声明,它不会自动执行对吗?例如,如果我将debounce 更改为setTimeout,它会在超时后自动运行,但是这个debounce 函数只是声明了,所以我需要在其他地方调用。
    • 好吧 setTimeout 与 debounce 不同。 setTimout 的目的是在提供的时间到期后执行一个方法。因此它会立即开始倒计时并返回一个您可以用来取消它的 id。多次调用 setTimout 会启动多个定时器,并多次执行传入的方法。
    • debounce 的目的是防止在给定时间范围内重复调用某个方法时多次执行该方法。因此,每次调用 debounce 函数时,计时器都会重新启动,直到最终停止调用并执行提供的方法。内部去抖动为此创建了所有管道,通常使用 setTimeout。所以你必须创建它,创建它不会执行它,你不想创建它来执行它,你想像对待任何其他方法一样对待它(只是现在它被谴责了)
    • 你是我的英雄。你拯救了我的一天。
    【解决方案2】:

    这是因为您需要一个回调作为thirdLib.debound 的参数。您在此处显示的代码实际上定义了一个带有两个参数的回调,您将其命名为 param1、param2。

    你只需要写另一个方法

    method3: thirdLib.debound(param1, param2).... 然后你把它作为

    method1: function(param1, param2){ // I can log param1 in here this.method3(param1, param2); }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 2015-09-15
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      相关资源
      最近更新 更多