The sky is the limit

ハイブリッドアプリ開発、PWAなど効率の良いiOSアプリ、Androidアプリ開発の情報を共有したい。アプリ開発は楽しい。【PWA、AngularJS、Monaca、Cordova、OnsenUI】

【Vue.js】component要素を使って画面切り替え【VueRouterを使わない】

【Vue.js】component要素を使って画面切り替え【VueRouterを使わない】

f:id:duo-taro100:20160218004611p:plain

今回はVueRouterを使わないで、画面を切り替える方法として、component要素を使ってます。

公式サイト

012-jp.vuejs.org

動き

うまく見えなければページをリロードしてください。

See the Pen vue-components by duotaro (@duotaro100) on CodePen.


実装内容

■index.html
vueはcdnを利用してます。

<html lang="ja">
<head>
	<meta charset="utf-8">
	<title>動的Componentの使い方</title>
	<script src="https://unpkg.com/vue/dist/vue.js"></script>
</head>
<body>
	<div id="app">
		<component :is="currentPage"></component>
		<button @click="transPage('home')">Home</button>
		<button @click="transPage('money')">Money</button>
		<button @click="transPage('setting')">Setting</button>
	</div>
</body>
</html>
	

以下の箇所で、画面切り替えを制御している。

<component :is="currentPage"></component>

currentPageが一致したコンポーネントを表示しています。
注意点は

デフォルトのcurrentPageを設定
currentPageの値を変更することで切り替えできる
画面全体の切り替えだけでなく、画面の一部だけを切り替えることもできる

■script

Vue.component('money', {
	template:
		'<div>'+
			'<p>welcome money page</p>'+
		'</div>'
})

Vue.component('home', {
	template:
		'<div>'+
			'<p>welcome home page</p>'+
		'</div>'
})

Vue.component('setting', {
	template:
		'<div>'+
			'<p>welcome setting page</p>'+
		'</div>'
})


var app = new Vue({
  el: '#app',
  data: {
		currentPage : 'home',
  },
  methods : {
  	/**
  	 * currentPageを変更します。
  	 * @param {string} page : 変更先のコンポーネント名
  	 */
  	transPage : function(page){
  		this.currentPage = page;
  	}
  }
})

デフォルトのcurrentPageを「home」に設定していて、transPageでcurrentPageの切り替えを行っています。
コンポーネントは切り替えがうまくいっていることが確認できればいいので適当です。