source

VueJs 동적 v-on 이벤트가 가능합니까?

goodcode 2022. 8. 15. 21:10
반응형

VueJs 동적 v-on 이벤트가 가능합니까?

VueJ에서 다이내믹 온이벤트를 설정할 수 있습니까?저는 모든 것을 들을 수 있는 입력으로 동적 형태를 구성 요소로 구축하려고 합니다.다음은 예를 제시하겠습니다.

import Vue from 'vue';

let formItems = {
  {type: 'checkbox', id: 'some-id', on:'change', model: 'someId'},
  {type: 'url', id: 'another-id', on:'keyup', model:'anotherId'},
};

let params = {
  someId: true,
  anotherId: 'http://www.example.com',
};

new Vue({
  el: '#app',
  data: {
    formItems: formItems,
    params: params,
  },
  methods: {
    checkInputParams(e) {
      e.preventDefault();
      // Do some stuff.
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.js"></script>

<div id="app">
  <div class="form-group" v-for="item in formItems">
      <input type="checkbox" <!-- Also need a workaround for dynamic type and v-model -->
          :id="item.id"
          :class="(item.class ? item.class : '')"
          :title="(item.title ? item.title : '')"
          :placeholder="(item.placeholder ? item.placeholder : '')"
          :autocomplete="(item.autocomplete ? item.autocomplete : false)"
          :disabled="(item.disabled ? item.disabled : false)"
          :max="(item.max ? item.max : '')"
          :min="(item.min ? item.min : '')"
          :maxlength="(item.maxLength ? item.maxLength : '')"
          :multiple="(item.multiple ? item.multiple : '')"
          :name="(item.name ? item.name : '')"
          :readonly="(item.readonly ? item.readonly : false)"
          :required="(item.required ? item.required : false)"
          v-on="{{ item.on }}:checkInputParams" <!-- Here I try the dynamic v-on -->
          v-model="params[item.model]"/>
  </div>
</div>

동적 v-on 이벤트를 다음과 같이 설정할 수 있습니까?v-on="<variable>:<function>"?

Vue 2.4.0 이상부터v-on오브젝트 구문을 받아들입니다.

메뉴얼을 참조해 주세요.

<button v-on="{ mousedown: doThis, mouseup: doThat }"></button>

시험:

<button v-on="buttonListeners"></button>
// ...
{
  data() {
    return {
      listeners: {
        'mousedown': 'doThis',
      },
    };
  },
  computed: {
    buttonListeners() {
      return Object
        .entries(this.listeners)
        .reduce((acc, [eventName, methodName]) => ({
          ...acc,
          [eventName]: this[methodName],
        }), {});
    },
  },
};

언급URL : https://stackoverflow.com/questions/44776751/vuejs-dynamic-v-on-event-possible

반응형