vue split (網頁) with quasar

網頁分割畫面test

by cactus77kiki

HTML

<!--
  Forked from:
  https://quasar.dev/vue-components/splitter#Example--Horizontal
-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.0/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/quasar.umd.min.js"></script>
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/quasar.min.css" rel="stylesheet">
<style>
  .disabled{display:none;}
  .black{}
</style>
<div id="q-app">
  <button type="button" v-on:click="CleanData">Cleanit</button>
  <button type="button" v-on:click="GetData">Getit</button>
  {{splitterModel}}
  <div>
      <q-splitter
        :separator-class="[splitmode? splited: disabled,color]"
        :after-class="splitmode? splited: disabled"
        v-model="splitterModel"
        :limits="[1,99]"
        horizontal
        style="height: 400px"
      >
  
        <template v-slot:before>
          <ul class="q-pa-md">
            
            選取頁碼:
            <select v-model = "page">
              <option v-for = "n in totalpage">{{n}}</option>
            </select>
            <div >
            <ul >
              
              <li v-for="(c,index) in pagedata">
                <button type="button" v-on:click="query(index)">Query</button>
                ({{c.id}}){{c.name}} - {{c.body}}
              </li>
            </ul>
            </div>
            </ul> 
        </template>
          
        <template v-slot:after >
          <div class="q-pa-md">
           
            <div >
              <button v-on:click="closesplit">Close</button>
              <ul>
                <li>【id】:{{comment.id}}</li>
                <li>【name】:{{comment.name}}</li>
                <li>【email】:{{comment.email}}</li>
                <li>【body】:{{comment.body}}</li>
              </ul>
            </div>
         ...

JavaScript

/*
ref:QSplitter
https://quasar.dev/vue-components/splitter
實作:
https://ithelp.ithome.com.tw/users/20111805/ironman/1731?page=1
ajax fake data
https://jsonplaceholder.typicode.com/
*/

var app = new Vue({
  el: '#q-app',
  data: {
    disabled:'disabled',	//css(分割線狀態:隱藏)
    splited:'',	//css(分割線狀態:分割)
    splitmode:false,	//分割模式(true:是/false:否)
    splitterModel: 99,	//分割比例(數值越高表示分割線位置越低
    color:'black',	//css2(測試用)
    totalpage:20,	//分頁數數
    page:1,	//目前頁數
    comments:[],	//全數資料
    comment:{}	//目前頁數資料
  },
  watch:{
  	//以分割模式取得分割線所在位置
  	splitmode: function(value){
      if(value)
      	this.splitterModel = 50;
      else
        this.splitterModel = 99.9;
    }
  },
  computed:{
  //取得目前所在頁數之資料集
    pagedata: function(){
      if(this.comments.length>0){
        //計算每頁筆數
        var rows = this.comments.length/this.totalpage;
        //取資料之start rows(1頁--1筆)
        var eindex = this.page*rows;
        //取資料之end rows(1頁--25筆)
        var sindex = eindex-rows;
        //取得所選頁碼資料
        var array=[];
        for(var i = sindex;i< eindex;i++){
          array.push(this.comments[i]);
        }
        return array;
      }else
        return [];
    }
  },
  methods:{
  //關閉分割模式
    closesplit:function(){
      this.splitmode=false;
    },
    //取得單一筆資料詳細data
    query: function(index){
      //this.comment = this.comments[index];
      this.comment = this.pagedata[index];
      this.splitmode = true;
    },
    //清除畫面
    CleanData: function(){
      this.comments = [];
      this.splitmode = false;
  },
  //取得所有資料
    GetData: function(){
      
    var self = this;  axios.get('https://jsonplaceholder.typicode.com/comments')
        .then(function (response) {
      
      self.comments = response.data;
        })
        .catch(function (error) {
          console.log(error);
        });
    }
    
  }
})