2017-09-25 3 views
1

Ich konnte es nicht schaffen, es zu arbeiten. v-on: click-Ereignis ruft die Methode in Vue-Instanz nicht auf. Hier ist der Codes:VueJS On-Click-Ereignis funktioniert nicht

<div id="app"> 
    <button class="btn btn-success" v-on:click="postEventData"> 
     <i class="icon wb-share"></i> Publish 
    </button> 
</div> 

Vue Beispiel:

var vm = new Vue({ 
    el: '#app', 
    data: { 
     someData: 'fooBar' 
    }, 
    methods: { 
     postEventData: function() { 
      axios.post('/foobar', vm._data); 
     } 
    } 
}); 

Jede mögliche Hilfe würde geschätzt!

+1

Ihr 'v-on: click' wird gerade richtig aufgerufen. Schauen Sie sich diese Geige an, zum Beispiel https://fiddle.jshell.net/v1qpt8d8/1/ –

+0

Sie müssen in der Methode 'postEventData' auf' this' verweisen, nicht auf 'vm' – thanksd

+0

Danke, aber sogar ich kopiere die jsfiddle, it funktioniert nicht. – lostbyte

Antwort

1

Ändern Sie diese axios.post('/foobar', vm._data);

dazu: axios.post('/foobar', this.data);

+0

Ich habe versucht, reguläre 'onclick =" vm.postEventData() "' und es funktioniert gut. Wenn ich 'vm._data' jedoch zu' this.data' ändere, funktioniert es auch nicht. Ich konnte nicht verstehen warum. – lostbyte

1

I'm not seeing anything broken with your code.

Das heißt, es wäre besser Praxis this zu verwenden, um die Vue-Instanz statt vm zu verweisen. Sie müssen jedoch immer noch auf die _data-Eigenschaft Ihrer Vue-Instanz verweisen, um das Objekt data zu erhalten (this.data wird undefined sein).

Doch während Sie können Referenz Ihre data Objekt über this._data, es ist ein Code Geruch ist. Die Dateneigenschaften Ihrer Vue-Instanz sind einzeln direkt von this aus zugänglich. Der Zugriff auf das gesamte Objekt bricht dieses Paradigma.

Wenn Sie versuchen, { someData: 'fooBar' } in Ihrem Post Antrag zu stellen, eine Dateneigenschaft für das machen (sagen wir postData) und verweisen Sie über this.postData:

var vm = new Vue({ 
    el: '#app', 
    data: { 
     postData: { someData: 'fooBar' } 
    }, 
    methods: { 
     postEventData: function() { 
      axios.post('/foobar', this.postData); 
     } 
    } 
}); 

Ihre Vorlage mit v-on:click="postEventData" in Ordnung ist.

+0

Danke für detaillierte Informationen! Ich werde Ihre Vorschläge zu meinem Code ausprobieren und die Ausgabe später in den Kommentaren teilen. – lostbyte