vue.js - 在 vue.js 中动态创建方法

标签 vue.js

通常我们会像下面这样在 vue.js 中预定义方法。

methods : {
    func1: function(){

    } 
}

并在模板中调用一个函数

<button @click="func1">click</button>

是否可以在vue.js中动态添加方法?

[举例] //实际上$methods是不存在的。我检查了 $data 是否存在。所以这是我的猜测。

this.$methods["func2"] = function(){

}

在 angular.js 中可以这样。

$scope["function name"] = function(){

}

最佳答案

javascript 中的函数与任何其他变量一样,因此您可以通过多种方式动态添加函数。一个非常简单的解决方案如下所示:

<template>
  <div id="app">
    <div @click="userFuncs.myCustomFunction">Click me!</div>
  </div>
</template>

<script>
export default {
  name: "App",

  data () {
    return {
      // These contain all dynamic user functions
      userFuncs: {}
    }
  },

  created () {
    window.setTimeout(() => {
      this.$set(this.userFuncs, 'myCustomFunction', () => {
        console.log('whoohoo, it was added dynamically')
      })
    }, 2000)
  }
};
</script>

然而,当在没有附加函数的情况下调用该函数时,它会发出警告和潜在的错误。我们可以通过使用执行默认函数的样板函数来解决这个问题,除非定义了新函数。

然后我们将模板更改为:

<div @click="executeDynamic('myCustomFunction')">Click me!</div>

并将以下内容添加到组件中:

  methods: {
    executeDynamic (name) {
      if (this.userFuncs[name]) {
        this.userFuncs[name]()
      } else {
        console.warn(`${name} was not yet defined!`)
      }
    }
  }

您应该始终尝试通过 @someEventv-on:someEvent 处理程序来使用 Vue 的事件处理程序,因为 Vue 会在适当的时候自动附加和分离事件处理程序。在极少数情况下,您可能想做的事情可能无法通过 Vue 实现,您可以自己附加事件处理程序。只需确保使用 beforeDestroy Hook 再次删除它们即可。

Edit Vue Template

关于vue.js - 在 vue.js 中动态创建方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51797029/

相关文章:

javascript - 从外部类调用 Vue 组件内部的方法

javascript - 使用动态创建的 src 路径在引导表行的单元格内显示图像

javascript - v-for循环中的单选输入选择相同值的多个单选按钮

javascript - 将父组件的属性传递给 Vue 中所有嵌入的子组件

css - 如何在 v-col 中装箱一个绝对的 v-overlay?

javascript - 动态博客文章上的语法突出显示不起作用

javascript - 正确使用 Vue Watch

vue.js - 使用 vuejs 中的计算属性将数据从子级传递到父级

vue.js - Vue.js 单文件组件中的数据获取

javascript - Vuejs 自定义搜索过滤器不适用于计算