jtk

【学習メモ】動かして学ぶ!Vue.js 開発入門 その11

Chapter13 JSON データを表示させてみよう

01 JSON ファイルの読み込み方

JSON を読み込む
<div id="app">
  <!-- JSON を読み込む -->
  <input type="file" v-on:change="onFileChange" />
  <p>読み込みデータ:<br />{{ loadData }}</p>
</div>
new Vue({
  el: "#app",
  data: {
    loadData: ""
  },
  methods: {
    onFileChange: function(e) {
      file = e.target.files[0];
      if (file) {
        var reader = new FileReader();
        var vm = this;
        reader.onload = function(e) {
          json = JSON.parse(e.target.result);
          vm.loadData = json;
        };
        reader.readAsText(file);
      }
    }
  }
});

test.json

[
  { "title": "A", "body": "a" },
  { "title": "B", "body": "b" },
  { "title": "C", "body": "c" }
]

結果

f:id:jotaki:20190119151225p:plain

02 JSON データを読み込んで、コンポーネントで並べる / 03 改良する:トランジションをつける

配列データをコンポーネントで並べる
<div id="app">
  <!-- 配列データをコンポーネントで並べる -->
  <transition-group>
    <div v-for="item in dataArray" v-bind:key="item.title">
      <my-product v-bind:object="item"></my-product>
    </div>
  </transition-group>
  <button v-on:click="sortData">ソート</button>
  <button v-on:click="shuffleData">シャッフル</button>
  <p><input type="file" v-on:change="loadData" /></p>
</div>
var MyComponent = {
  props: ["object"],
  template: "<div><p>{{ object.title }}</p><p>解説:{{ object.body }}</p></div>"
};

new Vue({
  el: "#app",
  data: {
    dataArray: [
      { title: "AAA", body: "aaa" },
      { title: "BBB", body: "bbb" },
      { title: "CCC", body: "ccc" }
    ]
  },
  components: {
    "my-product": MyComponent
  },
  methods: {
    sortData: function() {
      this.dataArray.sort(function(a, b) {
        return a.title < b.title ? -1 : 1;
        return 0;
      });
    },
    shuffleData: function() {
      var buffer = [];
      var len = this.dataArray.length;
      for (var i = len; len > 0; len--) {
        var r = Math.floor(Math.random() * len);
        buffer.push(this.dataArray[r]);
        this.dataArray.splice(r, 1);
      }
      this.dataArray = buffer;
    },
    loadData: function(e) {
      file = e.target.files[0];
      if (file) {
        var reader = new FileReader();
        var vm = this;
        reader.onload = function(e) {
          json = JSON.parse(e.target.result);
          vm.dataArray = json;
        };
        reader.readAsText(file);
      }
    }
  }
});

program.json

[
  {
    "title": "Python言語",
    "body": "数値計算が得意な、シンプルなプログラミング言語です。人工知能の研究で注目の言語です。"
  },
  {
    "title": "C言語",
    "body": "ハードウェアやOS向けのプログラミング言語です。古くからある言語で、数多くのプログラミング言語の元になりました。"
  },
  {
    "title": "Java言語",
    "body": "ハードウェアに依存しないプログラミング言語です。"
  }
]

結果

f:id:jotaki:20190119151237p:plain