vue.js | 複数チェックボックス

Demo

HTML
	<div id="app1">
		<input type="checkbox" id="aka_neko" value="1" v-model="cats">
		<label for="aka_neko">赤猫</label>
		<input type="checkbox" id="siro_neko" value="2" v-model="cats">
		<label for="siro_neko">白猫</label>
		<input type="checkbox" id="mike_neko" value="3" v-model="cats">
		<label for="mike_neko">三毛猫</label>
		<br>
		<span>選択: {{ cats }}</span>
	</div>
	
JavaScript
	var app; // vue.js
	jQuery(() => {
		app = new Vue({
			el: '#app1',
			data: {
				cats: [],
			},
		})
	});
	

checkedについて

vue.jsを適用しているcheckboxにchecked属性を記述してもチェックされない。
チェック状態にするにはdataのプロパティに値をセットする。
	var app; // vue.js
	jQuery(() => {
		app = new Vue({
			el: '#app1',
			data: {
				cats: [],
			},
		})
	});
	

vue.js | セレクトボックス SELECT

Demo

HTML

	<div id="app1">
		<div>
			<p>普通のセレクトボックス</p>
			「option value」の値を取得して表示
			<select v-model="fish_type">
				<option disabled value="">-- 魚選択 --</option>
				<option value="1">ガーラ</option>
				<option value="2">ミーバイ</option>
				<option value="3">アーガイ</option>
			</select>
			<span>Selected: {{ fish_type }}</span>
		</div>
		
		<div>
			<p>テキスト部分を取得して表示</p>
			<select v-model="fish_type2">
				<option disabled value="">-- 魚選択2 --</option>
				<option>ガーラ</option>
				<option>ミーバイ</option>
				<option>アーガイ</option>
			</select>
			<span>Selected: {{ fish_type2 }}</span>
		</div>
		
		<div>
			<p>動的にセレクトボックスを生成</p>
			<select v-model="amphibian_type">
				<option v-for="option in amphibianOptions" v-bind:value="option.value">
					{{ option.text }}
				</option>
			</select>
			<span>Selected: {{ amphibian_type }}</span>
		</div>
		
	</div>
	

JavaScript

	var app; // vue.js
	jQuery(() => {
		app = new Vue({
			el: '#app1',
			data: {
				fish_type: '',
				fish_type2: '',
				amphibian_type: '2',
				amphibianOptions: [
					{ text: 'カエル', value: '1' },
					{ text: 'イモリ', value: '2' },
					{ text: 'サンショウウオ', value: '3' }
				]
			},
		})
	});
	

基本型


	<select v-model="ent.animal_type" >
		<option v-for="(name, value) in animalTypeList" v-bind:value="value">@{{name}}</option>
	</select>
	
animalTypeListの構造
animalTypeList[数値] = '名前'


vue.js | セレクトボックス 選択肢を追加

Demo

HTML

<div id="app1">
	<select v-model="amphibian_value">
		<option v-for="(value, i) in amphibianList" v-bind:value="i">
			{{ value }}
		</option>
	</select>
	<span>Selected: {{ amphibian_value }}</span>
	<input type="text" v-model="new_amphibian" />
	<button type="button" v-on:click="addList()" >追加</button>
</div>
	

JavaScript

var app; // vue.js
jQuery(() => {
	
	let amphibianList = [
			'アフリカツメガエル',
			'シリケンイモリ',
			'トウキョウサンショウウオ',
			'カジカガエル',
	];
	
	app = new Vue({
		el: '#app1',
		data: {
			amphibian_value: '2',
			new_amphibian:'',
			amphibianList: amphibianList,
		},
		methods:{
			addList:()=>{
				let add_value = this.app.new_amphibian;
				this.app.amphibianList.push(add_value);
			}
		},
	})
});
	

vue.js | 動的複数チェックボックス

Demo

HTML

	<div id="app1">
		<div v-for="(ent, key) in catData" style="display:inline-block;margin-right:10px">
			<input type="checkbox" id="{{ent.xid}}" value="ent.value" v-model="cats[key]">
			<label v-bind:for="ent.xid">{{ent.text}}</label>
		</div>
		<br>
		<span>選択: {{ cats }}</span>
	</div>
	

JavaScript

	var app; // vue.js
	jQuery(() => {
		app = new Vue({
			el: '#app1',
			data: {
				cats: [false, true, true, false],
				catData:[
					{text:'赤猫', value:1, xid:'cb_cat_aka'},
					{text:'白猫', value:2, xid:'cb_cat_siro'},
					{text:'三毛猫', value:3, xid:'cb_cat_mike'},
					{text:'茶白猫', value:4, xid:'cb_cat_chasiro'},
				],
			},
		})
	});
	

v-forとinput要素へのbind

Demo

HTML

	<div id="app1">
		<div v-for="(ent, key, index) in catData" style="margin-right:10px">
			<span>index = {{index}}:</span>
			<span>key = {{key}}:</span>
			<input type="text" v-model="ent.cat_name">
			<input type="text" v-model="ent.cat_num">
	
		</div>
		<br>
		
		<hr>
		<div v-for="(ent, key, index) in catData" style="margin-right:10px">
			<span class="text-success">{{ent.cat_name}}</span>
			<input type="text" v-bind:value="ent.cat_num" />
		</div>
	</div>
	
JavaScript

	var app; // vue.js
	jQuery(() => {
		app = new Vue({
			el: '#app1',
			data: {
				catData:{
					akaneko: {cat_name:'赤猫', cat_num:1},
					sironeko: {cat_name:'白猫', cat_num:2},
					mikeneko: {cat_name:'三毛猫', cat_num:3},
					chasiro: {cat_name:'茶白猫', cat_num:4},
				},
			},
		})
	});
	

v-bindとv-modelの違い

v-modelは表示、入力ともに連動する。
v-bindは表示のみの一方通行である。入力を変えても全体に反映されない。
ただv-bindは各種属性にも適用できる。例→「v-bind:class='text-primary'」

Demo

HTML

	<div id="app1">
		v-model<br>
		<input type="text" v-model="test1"><br>
		<br>
		
		v-bind:value<br>
		<input type="text" v-bind:value="test1"><br>
		<br>
		
		{{}}<br>
		<div>{{test1}}</div>
	</div>
	

JavaScript

	var app; // vue.js
	jQuery(() => {
		app = new Vue({
			el: '#app1',
			data: {
				test1:'ライオンタマリン',
			},
		})
	});
	

vue.js | セレクトボックスとマッピング表示

Demo

HTML

	<div id="app1">
		<p>動的にセレクトボックスを生成</p>
		<select v-model="amphibian">
			<option v-for="(amphibian_name, amphibian_id) in amphibianList" v-bind:value="amphibian_id">
				{{amphibian_name}}
			</option>
		</select>
		<span>Selected: {{ amphibianList[amphibian] }}</span>
	
	</div>
	

JavaScript

	var app; // vue.js
	jQuery(() => {
		app = new Vue({
			el: '#app1',
			data: {
				amphibian: '2',
				amphibianList: {
					'100':'トウキョウサンショウウオ',
					'101':'シリケンイモリ',
					'102':'ホルストガエル',
					'103':'オオサンショウウオ',
					'104':'イボイモリ',
				}
			},
		})
	});
	

vue.js | v-ifの使い方

Demo

HTML

	<div id="app1">
		<div v-for="(str, key, index) in catdog">
			<div v-if="str=='cat'" class="text-danger">ネコ</div>
			<div v-if="str=='dog'" class="text-primary">イヌ</div>
		</div>
	</div>
	

JavaScript

	var app; // vue.js
	jQuery(() =&gt; {
		app = new Vue({
			el: '#app1',
			data: {
				catdog:['cat', 'cat', 'dog', 'cat']
			},
		})
	});
	

vue.js | 全データループ

Demo

JavaScript

	var app; // vue.js
	jQuery(() => {
		app = new Vue({
			el: '#app1',
			data: {
				cat_name:'赤猫', 
				cat_num:100,
				cat_date:'2019-3-20'
			},
		})
		
		// ▼ 全データのループ
		for(var key in app._data){
			console.log('key=' + key);
			console.log(app[key]);
			jQuery('#res').append(key + ' = ' + app[key] + '<br>');
		}
		
	});
	
HTML

	<div id="app1">
		<input type="text" v-model="cat_name">
		<input type="text" v-model="cat_num">
		<input type="text" v-model="cat_date">
	</div>
	<hr>
	<div id="res" class="text-success"></div>
	

Vueのappからバインドされていないプレーンなデータを取得する

Demo

無理
連想配列データをvue.jsでバインドした場合、どうしてもvue.jsによって余計な内部関数やプロパティが入ってしまう。それらを除いて一括でプレーンなデータを取得する方法は現状なさそう。
一つ一つ丁寧にキーをしていしてデータ取得するしかない。

ちなみに「_data」ではなく$dataが良いとのこと。
let data = vueApp.$data

旧・解説

連想配列データには対応できていない。


let app;

$(()=>{
	
	let formData = {
		'cat_name':'ボウシちゃん',
		'cat_nickname':'オコモさん',
	};
	
	app = new Vue({
		el: '#app1',
		data: {
			'formData':formData,
		},
	});
	
	let plainData = getPlainDataFromVue(app, 'formData');
	console.log(plainData);
	$('#res').html(JSON.stringify( plainData));
	
});

/**
* Vueのappからバインドされていないプレーンなデータを取得する
* @param app VueのApp
* @param key データのキー省略可
* @return {} プレーンなデータ
*/
function getPlainDataFromVue(app, key){
	let anyData = null;
	if(key==null){
		anyData = app._data;
	}else{
		anyData = app[key];
	}
	
	let plainData = {};
	for(let key2 in anyData){
		plainData[key2] = anyData[key2];
	}
	
	return plainData;
}

	

vue.jsによるメンバー登録フォーム | 新規登録フォーム, 会員登録, 利用登録, ユーザー登録

Demo




Vue.jsの要素の表示切替

HTML
	<div id="app1">
		<input type="text" v-model="test1" v-if="flg_a==1" />
	</div>
	

JavaScript

	var app1 = new Vue({
		el: '#app1',
		data: {
			test1: 'テスト',
			flg_a:1
		}
	})
	
flg_aが1である場合のみテキストボックス要素は表示される。