Vue.jsでアプリを作る際に参考となった記事をまとめたいと思います。ゼロからVue.jsを触るにあたり、つまづいたポイントなどを順番にご紹介します。
具体的には、Vue.jsの大まかな概要を理解できる記事やフレームワークの紹介。配列とオブジェクトの扱いが難しかったので、その値の操作方法を中心に解説します。私自身は過去にAngularでアプリを作った事がありましたが、もし同じようにVue.jsをこれから触ろうと考えてる方の参考になりましたら幸いです。
目次
Vue.jsの入門。まずは触って慣れる
Vue.jsでアプリを作る前に、大まかな使い方を雰囲気だけでも掴みたいと思いました。そこで、CodePenを使い実際にプログラミングしてみることにしました。
Vue.jsは短いコードでフォームの入力内容や処理内容を同期・処理させることができるのが特徴です。上記のサンプルで参考になったのがこちらの記事です。
Vue.js 2.x 入門 - Qiita
コンポーネントやフレームワークを大まかに把握
Vue.jsにはコンポーネントと呼ばれる一連の動作を処理する塊が有ります。例えば高機能なフォームであったり、リストや表を生成するプログラムです。
コンポーネントは自身で定義もできますが、用途に応じて既存のプログラムを利用すると素早くアプリを作成できます。コンポーネントについては以下の記事が参考になりました。
Vue.js いろいろまとめ - Qiita
またUIフレームワークと呼ばれる、見た目のデザインも設計されたプログラムも紹介されています。私の場合はVuetifyというUIフレームワークを利用させて貰うことにしました。レスポンシブであり、コンポーネントも十分揃っているのが選ぶ決め手でした。
配列の要素を上書きする方法
ここからはVue.jsを実際に触りながらアプリを作っていくことにしました。この時に、理解が難しかったのが配列の扱いです。
Vue.jsで配列の値を変更したり追加するにはsplice
やpush
などを使います。変更に使えるメソッドは限られています。詳しくはVue.jsのドキュメントが参考になります。
リストレンダリング — Vue.js
変更メソッド
例えばitems
という配列があり、0番目の配列要素の値を変更したいとします。
通常のJavascriptやESでは動作するのですが、Vue.jsの場合は上手く動作しません。Vue.jsではsplice
を使います。
sample.js1
| this.items.splice(0, 1, "hoge")
|
0番目の要素から1つをhoge
に変更します。配列要素の変更や追加、削除については以下の記事が参考になりました。
Vue.jsの配列扱い - Qiita
オブジェクトの扱いについて
Vue.jsではオブジェクトの扱いも、配列の時と同じように通常とは異なります。
Vueオブジェクトのプロパティを削除する方法
例えばusers
というオブジェクトのプロパティであるfoo
を消したい場合は次のようにVue.delete()
を使います。
sample.js1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| new Vue({
data: () => ({ users: { foo : { hoge: ... }, bar : { hoge: ... } } }), methods: { deleteObject: function() { Vue.delete(users, 'foo') } } })
|
Vueオブジェクトのプロパティを新たに追加する方法
Vue.jsで扱うオブジェクトにプロパティを追加するにはVue.set()
を使います。
sample.js1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| new Vue({
data: () => ({ users: { bar : { hoge: ... } } }), methods: { deleteObject: function() { Vue.delete(users, 'foo', 'something') } } })
|
Vueオブジェクトの複製と大幅な書き換え
一部のプロパティを変更したり追加するには前述の方法でも良いのですが、複数のプロパティを大きく変更したい場合はVueオブジェクトを作り直す方法もあります。
sample.js1 2 3 4 5 6
|
let copyMyObject = JSON.parse( JSON.stringify( this.MyObject ) )
this.MyObject = Vue.util.extend(copyMyObject)
|
JSON.stringify()
すると単純な文字列に変換することができます。さらにJSON.parse()
でオブジェクトを作り直すと、一般的なオブジェクトを作ることができます。
またVue.util.extend()
で通常のオブジェクトからVueオブジェクトを作ることができます。ここまでの内容は下記が参考になりました。
Vue.jsでObjectの要素を消す方法について(Vue.delete)
Vue.js 2: Delete property from data object - StackOverFlow
Vue.jsでObjectの要素を追加する方法について(Vue.set)
How to add a new property to vue (object) data? #3340 - GitHub
Vue.jsのObjectの複製(コピー)と書き換え
Duplicating an data object #971 - GitHub
thisとfunction()とアロー関数の混在
Vue.jsで分かりにくかったのが、this
とfunction(){ ... }
が使われていることでした。Vue.js 2.xではmethods:{}
の中でfunction(){}
を使うルールがあり、Vueの中で定義した変数やメソッドにアクセスできるようです。
ですので、基本的にthis
とfunction(){}
を使うことになります。
アロー関数は、thisが期待するVueインスタンスではなく…とは? - Qiita
ただ、例外としてアロー関数を使う場面があります。
simple.js1 2 3 4 5 6 7 8 9 10
| methods: { hoge: function() { setTimeout( () => { setTimeout( () => { this.$refs.network.fit() } , 250) } , 3000) } }
|
メソッドの中でsetTimeout
を使いたい場合には、アロー関数式を使うことでthis
にアクセスすることができるようです。
Vue equivalent of setTimeOut? - StackOverFlow
29番目の回答が参考になりました。