vue实战--v-for 遍历渲染按钮的两种实现方案(重点:按钮点击事件的绑定技巧)

简介: vue实战--v-for 遍历渲染按钮的两种实现方案(重点:按钮点击事件的绑定技巧)

607f0a3f7f9e42ddae1ad6d9bdda08e5.png

方案1:method为方法名的字符串

核心代码

@click="callBack(item.method)"
 
    callBack(method) {
      this[method]();
    },

完整范例

<template>
  <div class="mainBox">
    <p>{{ msg }}</p>
    <button
      v-for="(item, index) in btnList"
      :key="index"
      @click="callBack(item.method)"
      class="btn"
    >
      {{ item.label }}
    </button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      msg: "我会告诉你,你点击了哪个按钮!",
      btnList: [
        {
          label: "新增",
          method: "add",
        },
        {
          label: "删除",
          method: "del",
        },
      ],
    };
  },
  methods: {
    add() {
      this.msg = "点击了新增按钮!";
    },
    del() {
      this.msg = "点击了删除按钮!";
    },
    callBack(method) {
      this[method]();
    },
  },
};
</script>
<style scoped>
.mainBox {
  padding: 20px;
}
.btn {
  background: #009fe9;
  color: #fff;
  border: none;
  padding: 6px;
  width: 100px;
  border-radius: 4px;
  display: inline-block;
  margin-right: 10px;
}
</style>

方案2:method为函数

核心代码

method: () => {
            this.add();
          },
 

完整范例

<template>
  <div class="mainBox">
    <p>{{ msg }}</p>
    <button
      v-for="(item, index) in btnList"
      :key="index"
      @click="item.method"
      class="btn"
    >
      {{ item.label }}
    </button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      msg: "我会告诉你,你点击了哪个按钮!",
      btnList: [
        {
          label: "新增",
          method: () => {
            this.add();
          },
        },
        {
          label: "删除",
          method: () => {
            this.del();
          },
        },
      ],
    };
  },
  methods: {
    add() {
      this.msg = "点击了新增按钮!";
    },
    del() {
      this.msg = "点击了删除按钮!";
    },
  },
};
</script>
<style scoped>
.mainBox {
  padding: 20px;
}
.btn {
  background: #009fe9;
  color: #fff;
  border: none;
  padding: 6px;
  width: 100px;
  border-radius: 4px;
  display: inline-block;
  margin-right: 10px;
}
</style>

目录
相关文章
|
23小时前
|
JavaScript
Vue卸载eslint的写法,单独安装eslint,单独卸载eslint
Vue卸载eslint的写法,单独安装eslint,单独卸载eslint
|
23小时前
|
JavaScript
This dependency was not found:* vue/types/umd in ./src/router/index.jsTo install it, you can run
This dependency was not found:* vue/types/umd in ./src/router/index.jsTo install it, you can run
This dependency was not found:* vue/types/umd in ./src/router/index.jsTo install it, you can run
|
1天前
|
JavaScript 前端开发 程序员
Vue组件化、单文件组件以及使用vue-cli(脚手架)
Vue组件化、单文件组件以及使用vue-cli(脚手架)
11 0
|
1天前
|
JavaScript API
Vue数据动态代理机制的实现以及响应式与数据劫持
Vue数据动态代理机制的实现以及响应式与数据劫持
6 0
|
存储 前端开发 JavaScript
为什么我不再用Vue,改用React?
当我走进现代前端开发行业的时候,我做了一个每位开发人员都要做的决策:选择一个合适的框架。当时正逢 jQuery 被淘汰,前端开发者们不再用它编写难看的、非结构化的老式 JavaScript 程序了。
|
1天前
|
JavaScript 区块链
vue 自定义网页图标 favicon.ico 和 网页标题
vue 自定义网页图标 favicon.ico 和 网页标题
9 1
|
2天前
|
存储 JavaScript 数据安全/隐私保护
vue实战——登录【详解】(含自适配全屏背景,记住账号--支持多账号,显隐密码切换,登录状态保持)
vue实战——登录【详解】(含自适配全屏背景,记住账号--支持多账号,显隐密码切换,登录状态保持)
12 1
|
2天前
|
JavaScript
vue实战——404页面模板001——男女手电筒动画
vue实战——404页面模板001——男女手电筒动画
8 1
|
1天前
|
JavaScript 前端开发 程序员
Vue2入门(安装Vue、devtools,创建Vue)以及MVVM分层思想
Vue2入门(安装Vue、devtools,创建Vue)以及MVVM分层思想
7 0
|
1天前
|
JavaScript
vue中v-bind和v-model有什么区别?
在Vue.js中,v-bind和v-model都是指令,用于实现数据和DOM元素之间的双向绑定,但它们的使用场景和功能有所区别。
6 0