📘
【Vue】学習開始4週目で覚える内容
4週目で学ぶべきこと
- フック関数
- カスタムディレクティブ
- フィルター
- ミックスイン
- Vue Router
フック関数
- フック関数:プログラムの中に
独自の処理を割りこませる
ために用意されている仕組み。
関数名 | 詳細 |
---|---|
bind | 初めて対象のhtmlタグに紐づいた時に、呼ばれる |
inserted | カスタムディレクティブと紐づいた要素が親Nodeに挿入された際に呼ばれる |
update |
コンポーネント内でデータ更新が行われたタイミングで呼ばれる 子コンポーネント更新される前 |
componentUpdated |
コンポーネント内でデータ更新が行われたタイミングで呼ばれる 子コンポーネント更新された後 |
unbind | htmlタグとの紐付けが解除された時点で呼ばれる |
カスタムディレクティブ
- 引数は
el, binding, vnode, oldVnode
。 ※基本はel, binding
を使う - フック関数の中で、
bind, update
は頻出のため、function関数
で省略可能 -
el
はhtmlタグ
のことを指す。
//カスタムディレクティブ定義方法①
Vue.directive("sample", {
bind(el, binding) {
el.style.color = 'red';
}
});
//カスタムディレクティブ定義方法②
Vue.directive("sample", function(el, binding) {
el.style.border = 'red';
});
◆ binding.value
<template>
<!-- "v-sample"は、カスタムディレクティブ -->
<p v-sample="red">Home</p>
</template>
Vue.directive("sample", function(el, binding) {
//v-sample="red"の値を、binding.valueで受け取る
el.style.color = binding.value;
});
◆ 引数:arg
<template>
<!-- "v-sample:solid"で、引数を指定する -->
<p v-sample:solid="red">Home</p>
</template>
Vue.directive("sample", function(el, binding) {
//"v-sample:solid"の引数を"binding.arg"を用いて取得する
el.style.samplestyle = binding.arg;
});
フィルター
-
Vue.filter
で、フィルターを作成し、パイプ
を使って適用する
//フィルター名:"UpperCase" input値を"大文字"に変換する
Vue.filter("UpperCase", function(value) {
return value.toUpperCase();
});
<template>
<!-- "Vue.filter"で定義した"UpperCase"を挿入する -->
<h1>{{ answer | UpperCase }}</h1>
</template>
<script>
export default {
data() {
return {
//属性値:answer 初期値:"hello world!"
answer: "hello world!"
}
}
};
</script>
ミックスイン
-
export const
を用いてミックスイン
を定義する - ミックスインを定義したファイルを
import
,export
を使って反映させる
//ミックスイン名:sampleを定義する
export const sample = {
data() {
return {
//属性値:answer 初期値:"hello world!"
answer: "hello world!"
}
}
};
<template>
<p>{{answer}}</p>
</template>
<script>
//ミックスインを定義したファイル名をインポート
import { sample } from "@/sample";
export default {
//ミックスインで定義した内容をエクスポートし、反映させる
mixins: [sample]
};
</script>
Vue Router
◆ router.js
//vue-routerをインポートする
import Vue from "vue";
import Router from "vue-router";
import Home from "./views/Home.vue";
//Router(プラグイン)を適用する
Vue.use(Router);
//new Routerによって、パスルーティングを指定
export default new Router({
routes: [
{
//path, componentを指定
path: "/",
component: Home
}
]
})
◆ main.js
//vue-routerを追加する
import router from "./router"
new Vue({
//routerを追加
router: router,
render: h => h(App)
}).$mount("#app");
◆ App.vue
<template>
<!-- "router-view"を使用することで、設定したルーティングを適用する -->
<router-view></router-view>
</template>
Discussion