「一日で基本が身に付く!Vue.js」石亀 広大 [著]
この本を終えると、JavaScriptにおけるVue.jsのメリットがわかる!
ついでに以下のアプリを作成できる
・TODOアプリ
・画像ビューワー
Vue.jsはJavaScriptフレームワーク
プログレッシブ(斬新的)フレームワーク
→規模によって段階的に利用できる
コンポーネント志向
→部品の組み合わせで構築できる
フロントエンドのフレームワークは他にも
RaectやAnglar
例えばDjangoは?
Pythonで実装されたWebアプリケーションフレームワーク
Vue.jsは学習コストが低い
→HTMLとJavaScriptに馴染みがあればすぐ理解できる
Vue.jsと比較されることが多い他のフレームワークでは、Babelやwebpackの利用が前提だが、Vue.jsは必要なし。
(Vue.jsでも必要に応じてwebpackなどツールを導入できる)
デバックにはDevToolsが欠かせない。
GoogleGhromeでは「Chrome DevTools」というWEB開発ツールが標準で用意されている。
「console.log()」はJacaScriptの通常開発と同様に利用可能。
new Vue({
el: '#app'
});
<body>
<div id="app">hello Vue.js</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="./script/script.js"></script>
</body>
Vue.jsのポイント
通常のJacaScript
1.HTMLの要素を取得
2.データを変更
3.HTMLへの繁栄
Vue.jsでは
データバインディング機能により、保持しているデータと画面に表示されているデータが同じ状態になる
new Vue({
el: '#app',
data() {
return {
count: 0
};
},
<p>{{ count }}</p>
Vueインスタンスのプロパティ
・el →Vueインスタンスを結びつけるHTML要素を指定
・data →データを入れておく場所
・methods →メソッドを定義する場所
・computed →算出プロパティ。バリエーションに使える。
・template →HTMLテンプレート
・components →外部モジュールとして取り込んだコンポーネントをHTMLテンプレートとして使える
Vue.jsのキーワード
・レンダリング(以下の記述が人に説明しやすいので忘れ防止で記載する)
→あるルールに従って記述されたデータを、人間が読める形に整形してブラウザに表示すること
・Vue.jsの「差分レンダリング」「仮想DOM」
→更新が必要な部分だけレンダリングする差分レンダリング
→通常のDOMとは違い、更新が必要な部分を検出するために利用する仮想DOM
※DOM(Document Object Model)→ JacaScriptから操作する際に使われる仕組み
・JavaScriptのメソッドの書き方
「this」はオブジェクトそのものを差し、同じオブジェクトのプロパティを利用するときに使う。
new Vue({
el: '#app',
data() {
return {
count: 0
};
},
methods: {
increment() {
this.count++;
},
decrement() {
this.count--;
}
}
・条件付きレンダリング
v-if, v-elseはVue.js特有の要素
・双方向バインディング
v-model
const app = new Vue({
el: '#app',
data() {
return {
name: 'name_test'
};
}
<input v-model="name" type="text" name="" />
→ただし、イベントハンドラ記載したほうが自由度が高い
・バリデーション
computedで記載
new Vue({
el: '#app',
data() {
return {
name: 'name',
};
},
computed: {
isInValidName() {
return this.name.length < 4;
・リストレンダリング
v-for
v-bind
:key="i" →v-bind:key="i"の短縮形
v-forの変数i(indexが入っている)をkey属性にバインディングしている。 ※Vue.jsが識別できるようにする
・スタイルバインディングで見た目を動的に変える(以下、v-bindの省略)
new Vue({
el: '#app',
data() {
return {
range: 10,
};
},
computed: {
bindStyle() {
return `width: ${this.range}px; height: ${this.range}px;`;
}
}
<div :style="bindStyle"></div>
・クラスバインディング
new Vue({
el: '#app',
data() {
return {
isActive: true
};
},
<div :class="{'is-active': isActive}"></div>