2017-11-23 7 views
0

ajaxリクエストで読み込まれたコンテンツに関連する小さな問題があります。Vue.js v1がAjaxで読み込まれたhtmlファイルで正常に動作しない

私はすべてが1ページにあり、リロードや何もせずに作業しているWebアプリケーションを作成しています。そこで、コンテンツ部分を分割して別々のファイルに分割し、Ajaxで読み込みました。

ファイルを別々のファイルに分割せずにすべてを1つのファイルにロードすると、すべてが機能します。しかし、コンテンツファイルを作成してAjax jQueryリクエストで読み込むと、Vue.jsは{{variable}}や他のイベントで正常に動作しなくなりました。

私はこのWebアプリケーション用にVue.js v1とjQueryを使用しています。

ありがとうございました。

+0

,,我々は、 –

+0

@KresimirPendicまあ,,あなたを助けることができるようにそれを参照してくださいここでそれを共有したり、jsfiddleサイトにする必要がありますそれは多くのコードです。受信したHTMLを追加するためにjQueryリクエスト($( ".layoutCity").load( "../ url/forecast.html");)を使用し、そのHTMLに{{variables}}をすべて使用しています。 HTMLとしてロードするだけです。 Vue.jsはそれを読んでいません。 – Aivaras

+0

Vueは、あなたが使用しようとしているように機能するようには設計されていません。テンプレートをコンパイルしてデータバインディングを追加する必要があります。テンプレートHTMLをjqueryでページにダンプすることはできません。作業。 (一般的に、Vueや同様のフレームワークを使用している場合は、直接DOMを変更しないでください)。なぜコンテンツを複数のファイルに分割することにしましたか? –

答えて

0

Alvaras、

は、私が最初にテンプレートとして引っ張った後、VUEインスタンスを装着しています1つのHTMLファイルを使用してあなたの例を送っています。

jQueryの代わりにaxiosを使用しました。これはすばらしく、何が起きているのかを理解するのに役立つコードのコメントが含まれています。

注意:完全に信頼できるサーバーからテンプレートファイルをプルするだけです。あなたは私たちにあなたが使用しているコードを与える必要があり

// let's start by pulling template file and callback our page logic 
 
axios.get('https://dl.dropboxusercontent.com/s/4fg33iyn7kie88s/template.html') 
 
    .then(function(res){ 
 
    // 1.) render our template on the page 
 
    renderTemplate(res.data); 
 
    // 2.) create Vue instance 
 
    newVueInstance(); 
 
    }) 
 
    .catch(err); 
 

 
// create template on our page 
 
function renderTemplate(html){ 
 
    var el = document.createElement('div'); // create new 'div' 
 
    document.body.append(el); // append it to body 
 
    el.innerHTML = html; // and set html 
 
} 
 

 
// attach new Vue fn 
 
function newVueInstance(){ 
 
    // build new vue instance 
 
    var list = new Vue({ 
 
    el:"#list", 
 
    data: { items: [], type: 'posts', }, 
 
    methods: { 
 
     // let's pull data from remote host (JSON format) 
 
     pullData: function(verb) { 
 
     var url = "https://jsonplaceholder.typicode.com/" + verb; 
 
     axios.get(url) 
 
      .then(function(res){ 
 
      list.items = res.data; 
 
      list.type = verb; 
 
      }) 
 
     .catch(err); 
 
     }, 
 
    }, 
 
    }); 
 
} 
 

 
// handle err 
 
function err(er){ console.log(er);}
ul, 
 
li { 
 
    list-style: none; 
 
    padding: 5px; 
 
} 
 

 
li .title, 
 
a { 
 
    font-weight: 900; 
 
    cursor: pointer; 
 
}
<script src="https://unpkg.com/[email protected]/dist/axios.min.js"></script> 
 
<script src="https://unpkg.com/[email protected]/dist/vue.min.js"></script>

+0

ありがとうございますが、この方法はデータのみで動作するため、HTMLも取得する必要があります。私は軸情報を使って情報を表示するためにjsonデータを取得します。 – Aivaras

+0

私は簡単にjqueryをAxiosに置き換えることができます。また、htmlテンプレートも引き出す​​ことができます –

関連する問題