
—–
《vue.jsの簡単な説明》
JavaScriptフレームワークの1つで、主にMVCモデルのView層を扱う。
ECMAScript5をサポートするブラウザで動作する。IE9以降で動作。
また、開発者用に「Vue Devtools」というChromeのDeveloperToolsの拡張機能が公開されている。
CDNを利用すれば、開発環境は不要で、「サクッ」と評価できる。 PHPが理解できれば、ほぼ使えると思う。
基本1 [Hellow World] CDN方式でvue.jsを利用する
「{{ プロパティ名 }}」と言う書式でデータを出力する scriptタグ 「Vue」オブジェクトの生成 [el]プロパティ オブジェクトの割当 [data]プロパティ [キー名:値]形式でデータを記入 hellow.html {{ msg }}
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Vue.js</title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
<script>
//id=appの要素にVueを適用する
const app = new Vue({
el:'#app',
data:{ msg:'Hello World'}
})
</script>
</body></html>
【結果】
基本2-1 [Event ハンドリング(文字)]
scriptタグ 「Vue」オブジェクトの生成 [el]プロパティ オブジェクトの割当 [data]プロパティ [キー名:値]形式で初期データを記入 [methods]プロパティ 呼び出されるメソッドを記入 event.html Vue.js change
{{ msg }}
<script>
//id=appの要素にVueを適用する
const app = new Vue({
el:'#app',
data:{ msg:'Hoge'},
methods: {
changeMSG: function(){
this.msg ='fuga'
}
}
})
</script>
【結果】 [change]ボタンをクリックすると
基本2-2 [カウントアップ(数値)]
「{{ プロパティ名 }}」と言う書式で数式を記載する scriptタグ 「Vue」オブジェクトの生成 [el]プロパティ オブジェクトの割当 [data]プロパティ [キー名:値]形式で初期データを記入 event2.html Vue.js +1
{{ counter }}
<script>
//id=appの要素にVueを適用する
const app = new Vue({
el:'#app',
data:{ counter:0}
})
</script>
【結果】 「+1」をクリック 「+1」をクリック 基本3 [コンポーネント] 「{{ プロパティ名 }}」と言う書式で[コンポーネント]を定義する scriptタグ 「Vue.component)」の定義 [template]プロパティ コンポーネントに含める要素を記入 [el]プロパティ オブジェクトの割当 component.html Vue.js
<script>
//id=appの要素にVueを適用する
Vue.component('my-comp',{
template:'<h1>hoge</h1>'
})
var app = new Vue({
el:'#app',
})
</script>
【結果】
基本3 [ディレクティブ] HTMLタグに「v-~~」の属性を指定すること。
前項の[v-on]もディレクティブ v-text ~テキストのレンダリング~ v-text.html Vue.js {{ msg }}
<script>
//id=appの要素にVueを適用する
const app = new Vue({
el:'#app',
data:{ msg:'Hello World'}
})
</script>
v-html ~HTMLのレンダリング~ <,>,&などを <,>,& に変換しないで出力できる v-html.html Vue.js
テキスト出力:{{ rawHtml }}
HTML出力:
<script>
//id=appの要素にVueを適用する
const app = new Vue({
el:'#app',
data:{ rawHtml:'<span style="color:blue">Hello World</span>'}
})
</script>
【結果】
v-show ~条件に応じたのレンダリング制御~ 値の真偽により表示する/しないを制御する
v-show.html Vue.js hoge
<script>
//id=appの要素にVueを適用する
const app = new Vue({
el:'#app',
data:{ hoge:true } ,
methods: {
change:function(e){
this.hoge = e.target.checked
}
}
})
</script>
【結果】 クリック クリック v-if,v-else,v-else-if ~条件分岐を行う~ 要素自体の有無を制御する v-if.html Vue.js hoge
<script>
//id=appの要素にVueを適用する
const app = new Vue({
el:'#app',
data:{ hoge:true } ,
methods: {
change:function(e){
this.hoge = e.target.checked
}
}
})
</script>
【結果】前項と同じ v-else.html Vue.js hoge fuga
<script>
//id=appの要素にVueを適用する
const app = new Vue({
el:'#app',
data:{ hoge:true } ,
methods: {
change:function(e){
this.hoge = e.target.checked
}
}
})
</script>
クリッククリッククリック v-else-if.html Vue.js
<span v-if="type=='A'">hoge</span>
<span v-else-if="type=='B'">fuga</span>
<span v-else="type=='C'">piyo</span>
</div>
<script>
//id=appの要素にVueを適用する
const app = new Vue({
el:'#app',
data:{ type:'A' }
})
</script>
v-for ~繰り返しを行う~ オブジェクトや配列に対して繰り返し処理を行う。 v-for.html Vue.js
- {{ l }}
<script>
//id=appの要素にVueを適用する
const app = new Vue({
el:'#app',
data:{ lst:['hoge','fuga','piyo'] }
})
</script>
【結果】
v-on ~イベントハンドリングを実装する~ オブジェクトや配列に対して繰り返し処理を行う。「@」で記述を省略できる v-on.html Vue.js +1
{{ counter }}
<script>
//id=appの要素にVueを適用する
const app = new Vue({
el:'#app',
data:{ counter:0 }
})
</script>
クリック クリック v-bind ~HTML属性を割り当てる~ タグに属性を割り当てる v-bind.html Vue.js
<script>
//id=appの要素にVueを適用する
const app = new Vue({
el:'#app',
data:{ msg:"hoge" }
})
</script>
v-model ~入力フォームへモデルを割り当てる~ HTMLタグの「input」「seelct」「textarea」に対して、Vueオブジェクトのデータとフォーム部品の値を関係付けます。 v-model.html Vue.js 入力値:{{ msg }}
<script>
//id=appの要素にVueを適用する
const app = new Vue({
el:'#app',
data:{ msg:"hoge" }
})
</script>
入力窓にテキスト入力 v-pre ~テキストをそのまま出力する~ 「{{ … }}」をそのまま出力シたい場合に使用する v-pre.html Vue.js {{ msg }} {{ msg }}
<script>
//id=appの要素にVueを適用する
const app = new Vue({
el:'#app',
data:{ msg:"hoge" }
})
</script>
v-once ~一度だけレンダリングする~ レンダリングを一度だけ行い、それ以降は変数が変動しても、表示に反映しない。 v-once.html Vue.js {{ msg }} {{ msg }}
<script>
//id=appの要素にVueを適用する
const app = new Vue({
el:'#app',
data:{ msg:"hoge" }
})
</script>
応用1 [validation] validation.html Vue.js
<!-- Vue データを出力する -->
<div id="app">
<input type="text" v-model="msg">
<div class="error" v-if="error.require">必須項目です</div>
<div class="error" v-if="error.tooShort">短すぎます</div>
<div class="error" v-if="error.tooLong">長過ぎます</div>
</div>
<script>
//id=appの要素にVueを適用する
const app = new Vue({
el:'#app',
watch: {
msg: function(newVal,oldVal){
this.error.require=(newVal.length<1)?true:false;
this.error.tooShort=(newVal.length<3&&newVal.length>0)?true:false;
this.error.tooLong=(newVal.length>5)?true:false;
}
},
data: {
msg:'hoge',
error:{
require: false,
tooShort: false,
tooLong: false
}
}
})
</script>
応用2 [JSONファイル読込] sample.jsonを読み込んで表示する。
参考 ※本番Webサーバーでないと動作しない。
[sample.json] { “vtuber”: [ { “id”: 0, “name”: “Ishiguro tatuo” }, { “id”: 1, “name”: “Herohero Dousita” }, { “id”: 2, “name”: “Gahaha Oyoyo” } ] }
jsonread.html Vue.js
- {{ person.name }}
<script>
//id=appの要素にVueを適用する
const app = new Vue({
el: '#app',
data: {
vtuber: []
},
mounted() {
fetch('./sample.json')
.then(response => {
return response.json();
})
.then(json => {
this.vtuber = json.vtuber;
})
}
})
</script>
【結果】
応用3 [シンプルなGrid] Grid.jsを読み込んで表示する。
参考 ソート、検索窓、ページ送りなどを定義するだけで画面が完成する grid1.html Vue.js
<script>
//id=appの要素にVueを適用する
new gridjs.Grid({
columns: ["名前", "住まい", "好きな物"],
sort: true,
search: true,
pagination: true,
data: [
["たかし", "東京", "ぶどう"],
["ゆみ", "東京", "もも"],
["ジョン", "福岡", "りんご"],
["あきら", "青森", "なし"],
["あかり", "宮崎", "さんま"]
]
}).render(document.getElementById("wrapper"));
</script>