code

vue에서 @click으로 여러 함수를 호출하는 방법은 무엇입니까?

codestyles 2020. 11. 9. 08:12
반응형

vue에서 @click으로 여러 함수를 호출하는 방법은 무엇입니까?


질문:

한 번의 @click에서 여러 함수를 호출하는 방법은 무엇입니까? (일명 v-on:click)?

나는 시도했다

  • 세미콜론으로 함수 분할 : <div @click="fn1('foo');fn2('bar')"> </div>;

  • 여러 가지 사용 @click: <div @click="fn1('foo')" @click="fn2('bar')"> </div>;

하지만 제대로하는 방법?

추신 : 확실히 나는 항상 할 수 있습니다

<div v-on:click="fn3('foo', 'bar')"> </div>

function fn3 (args) { 
  fn1(args);
  fn2(args);
}

그러나 때로는 이것은 좋지 않습니다.


우선 가독성을 위해 @click대신 짧은 표기법을 사용할 수 있습니다 v-on:click.

둘째, 위의 주석에서 언급 한 @Tushar와 같이 다른 함수 / 메소드를 호출하는 클릭 이벤트 핸들러를 사용할 수 있으므로 다음과 같은 결과를 얻을 수 있습니다.

<div id="app">
   <div @click="handler('foo','bar')">
       Hi, click me!
   </div>
</div>

<!-- link to vue.js !--> 
<script src="vue.js"></script>

<script>
   (function(){
        var vm = new Vue({
            el:'#app',
            methods:{
                method1:function(arg){
                    console.log('method1: ',arg);
                },
                method2:function(arg){
                    console.log('method2: ',arg);
                },
                handler:function(arg1,arg2){
                    this.method1(arg1);
                    this.method2(arg2);
                }
            }
        })
    }()); 
</script>

저는 Vue 2.3을 사용 중이며 다음과 같이 할 수 있습니다.

<div v-on:click="firstFunction(); secondFunction();"></div>

anomymous 함수를 추가하려면 대안이 될 수 있습니다.

<div v-on:click="return function() { fn1('foo');fn2('bar'); }()"> </div> 

조각으로 분리하십시오.

인라인 :

<div @click="f1() + f2()"></div> 

OR : 복합 함수를 통해 :

<div @click="f3()"></div> 

<script>
var app = new Vue({
  // ...
  methods: {
    f3: function() { f1() + f2(); }
    f1: function() {},
    f2: function() {}
  }
})
</script>

This simple way to do v-on:click="firstFunction(); secondFunction();"


This works for me when you need to open another dialog box by clicking a button inside a dialogue box and also close this one. Pass the values as params with a comma separator.

<v-btn absolute fab small slot="activator" top right color="primary" @click="(addTime = true),(ticketExpenseList = false)"><v-icon>add</v-icon></v-btn>

in Vue 2.5.1 for button works

 <button @click="firstFunction(); secondFunction();">Ok</button>

The Vue event handling only allows for single function calls. If you need to do multiple ones you can either do a wrapper that includes both:

<div @click="handler"></div>
////////////////////////////
handler: function() { //Syntax assuming its in the 'methods' option of Vue instance
    fn1('foo');
    fn2('bar');
}

EDIT

Another option is to edit the first handler to have a callback and pass the second in.

<div @click="fn1('foo', fn2)"></div>
////////////////////////////////////
fn1: function(value, callback) {
    console.log(value);
    callback('bar');
},
fn2: function(value) {
    console.log(value);
}

Html:

<div id="example">
  <button v-on:click="multiple">Multiple</button>
</div>

JS:

var vm = new Vue({
  el: '#example',
  data: {
    name: 'Vue.js'
  },
  // define methods under the `methods` object
  methods: {
    multiple: function (event) {
      this.first()
      this.second()
    }
    first:  function (event) {
      //yourstuff
    }
    second: function (event) {
      //yourstuff
    }
  }
})

vm.multiple()

you can, however, do something like this :

<div onclick="return function()
              {console.log('yaay, another onclick event!')}()" 
              @click="defaultFunction"></div>

yes, by using native onclick html event.

참고URL : https://stackoverflow.com/questions/38744932/how-to-call-multiple-functions-with-click-in-vue

반응형