2017-06-06 16 views
0

AJAX呼び出しによるページ番号付けを実行する一般的なVue.JSコンポーネントを作成しようとしています。コンポーネントが使用するデータ(アイテムのリスト)をコンポーネントでカプセル化し、AJAX URLのみをVue.JS Propsを介してコンポーネントに渡したいとします。私はSLOTを使用して、反復部分を含むコンポーネントテンプレートを生成しています。 これは、呼び出し元が項目をループしているため、親(呼び出し元)がバインドされた変数にアクセスする必要があることを意味します。コンポーネントが1つのタイプのリストに固有になり、もう一般的なリストにはならないため、コンポーネントにループ部分を配置します。Vue.jsページングコンポーネント

SLOTが使用されている場合でも、コンポーネントを繰り返し処理するにはどうすればよいですか?または、親がアイテムを繰り返し処理しても、コンポーネントにデータを渡して次のページを取得して更新できる親のデータ。

<script type="text/x-template" id="pagination-component"> 

<div class="pagination-wrapper"> 

<slot name="header"></slot> 

<slot name="table">default text: Please define the table in parent!</slot> 

<div class="well"> 
    <a href="#" @click="getPrevPage">Previous Page</a> | 
    <a href="#" @click="getNextPage">Next Page</a> 
</div> 

<slot name="footer"></slot> 

</div> 
</script> 

とコンポーネントを使用して、私のメインページ(親)がある:私のコンポーネントのレイアウトがある

// my component 
Vue.component('pagination', { 
    template: '#pagination-component', 
    props: { 
    // the URL for ajax calls is passed from parent to component 
    source: { 
     type: String, 
     required: true 
    } 
}, 
    data: function() { 
    // access the data being paginated somehow 
    return data; 
    }, 

    created: 
    function() { 
    console.log("component loaded..."); 
    this.getNextPage(); 
    }, 
    methods: 
    { 
    getNextPage: function() { 
      console.log("getNextPage called..."); 
      // call ajax method and populate the binded data 
    }, 
    getPrevPage: function() { 
      console.log("getPrevPage called..."); 
      // call ajax method and populate the binded data  
    } 
    } 
}) 

console.log("javascript loaded..."); 


var app = new Vue({ 
    el: '#wrapper', 
data: {  
} 
}) 

次のコードを参照してください良く説明するために

<div class="table-wrapper" slot="table"> 

    <table class='table'> 

     <tr> 
      <th>Username</th> 
      <th>First name</th> 
      <th>Last name</th> 
      <th>E-mail</th> 
     </tr> 

     <tr v-for="user in users"> 
      <td> 
      <a :href="user.id">{{user.username}}</a> 
      </td> 
      <td>{{user.firstname}}</td> 
      <td>{{user.lastname}}</td> 
      <td>{{user.email}}</td> 
     </tr> 

    </table> 

</div> 

答えて

0

私はそれがフェッチデータとページネータの契約を持っている魅力的だ実現が、私は最善のアプローチは、ページネータは完全にそれがページ付けされたデータから切り離すこと持つことだと思います。

したがって、親は最大ページ数を通過する必要があり、改ページコンポーネントはページ番号に基づいてデータを取得することに対処する必要があるページ番号を親に返す必要があります。つまり、複雑なコンポーネントを1つ作成することなく、ページ設定を利用するさまざまなページ設定コンポーネントを開発できます。

私はこのアプローチをとって何かを実際に書きましたが、私のGitHub Pageで見ることを歓迎します。この特定のコンポーネントは安定していませんが、私は何を意味するのか分かりません。