2017-08-07 1 views
0

Ich habe eine Vuejs-Komponente in einem HTML, die von jquery AJAX-Aufruf zurückgegeben wird, aber es die Komponente nicht gerendert. also, wie vuejs machen diese Komponente von jquery machen?wie vuejs Komponenten in dynamisch hinzugefügtem HTML rendern von jquery

jquery Codebeispiel:

$.post(baseURL + "media", postData, function (data) { 
     if(data.status == true) { 
      $('#media_lib_app').html(data.view); 
     } 
}); 

und was im Inneren des data.view zurückgegeben wird, ist:

<test-component></test-component> 

aber wenn die data.view zum html div hinzugefügt wird, ist es nicht machen die Komponente.

+0

Können Sie Ihren Code zeigen? – thanksd

+0

der eigentliche Code ist zu groß wie ein altes Projekt, das auf jquery angewiesen war, aber dies ist die genaue Situation, wie in dem Beitrag –

+0

erklärt Sie werden eher Hilfe erhalten, wenn Sie eine [Minimal, Complete und Verifizierbar ] (https://stackoverflow.com/help/mcve) Beispiel für Ihr Problem. – thanksd

Antwort

1

Wenn ich richtig verstehe, erhalten Sie ein Tag einer benutzerdefinierten Komponente von Ihrem AJAX-Aufruf und möchten daraus eine Vue-Komponente erstellen.

Also lassen Sie uns sagen, dass dies Ihre <test-component>:

Vue.component('test-component', { 
    template: "<p>I am the test component template</p>", 
    methods: { 
     // Component logic... 
    } 
}); 

Jetzt irgendwo in Ihrer Anwendung, machen Sie die AJAX-Aufruf:

$(document).ready(function() { 
    var html = '<test-component></test-component>'; 
    var url = "https://jsonplaceholder.typicode.com/posts"; 

    $.get(url, function (data) { 

    var res = Vue.compile(html) 
    new Vue({ 
     render: res.render, 
     staticRenderFns: res.staticRenderFns 
    }).$mount('#media_lib_app') 

    }.bind(this)); 
}) 

Ihre Komponentenmontagepunkt:

<div id="media_lib_app"></div> 

Mehr über .comPile:

https://vuejs.org/v2/api/#Vue-compile

Hinweis: Vue.compile() ist nur in der Voll Build verfügbar.

Sie können hier ein funktionierendes Beispiel finden:

https://jsbin.com/motuvokeha/edit?html,js,output

Hope this Ihnen helfen können :)

+0

ja, aber das Problem ist, dass der Ajax-Aufruf in jquery Code nicht vue Code passieren und zu diesem Zeitpunkt können wir nicht diesen Teil zu vue ändern, so die Frage war, wie mach was du geschrieben hast aber von jquery nicht vue –

+0

@m_elbardeny Ich habe die Antwort bearbeitet. Wie Sie jetzt sehen können, wird der Code nur in einem jQuery-Block erstellt. Um eine Vue-Komponente zu verwenden, müssen Sie sie jedoch zuerst registrieren, damit Vue weiß, was damit zu tun ist. Ich hoffe, Sie verstehen, dass Sie nicht nur ein HTML-Tag bekommen und erwarten, dass Vue magisch Dinge herausfinden :) Das sagte innerhalb der AJAX-Callback Sie mounten und kompilieren die bereits registrierte Komponente. Ich glaube, es gibt keinen anderen Weg. Hoffe, dieses Mal habe ich es :) –

+0

funktioniert das, wenn ich Webpack verwende? Ich versuchte es und Javascript wirft Fehler Vue ist nicht definiert –

Verwandte Themen