Vue - computed and watch

1. 使用 Computed 來過濾資料。

2.使用 Computed 來呈現時間格式。

(format javascript timestamp)

3.使用watch 監控變數

1.使用 Computed 來過濾資料。

<div id="app">
<h4>Computed</h4>
<p>使用 Computed 來過濾資料。</p>
<input type="text" class="form-control" v-model="filterText">
<ul>
 <li v-for="(item, key) in filterArray" :key="item.age">
   {{ key }} - {{ item.name }} {{ item.age }} 歲 <input type="text">
 </li>
</ul>
</div>

<script>
var app = new Vue({
el: '#app',
data: {
	arrayData: [{
		name: '小明',
		age: 16
	}, {
		name: '漂亮阿姨',
		age: 24
	}, {
		name: '杰倫',
		age: 20
	}],
	filterText: ''
},
computed: {
	filterArray: function() {
		var _array = [];
		var me = this;
		_array = this.arrayData.filter(function(item) {
			return item.name.match(me.filterText);
		});
		return _array;
	}
	}
);
</script>

2.使用 Computed 來呈現時間格式 - javascript timestamp。

<div id="app">
<p>使用 Computed 來呈現時間格式。</p>
<p>{{newDate}}</p>
<p>{{formatTime}}</p>
</div>

<script>
var app = new Vue({
el: '#app',
data: {
	newDate: 0
},
computed: {
  // javascript 解析  timestamp
  formatTime: function() {
	var dates = new Date(this.newDate * 1000);
	var year = dates.getFullYear();
	var month = dates.getMonth() + 1;
	var date = dates.getDate() + 1;
	var hours = dates.getHours();
	var minutes = dates.getMinutes();
	// 如果分鐘要補滿兩位數,可改用這個寫法
	// var minutes = (dates.getMinutes() < 10 ? '0' : '') + dates.getMinutes(); 	
	var seconds = dates.getSeconds();
	return `${year}/${month}/${date} ${hours}:${minutes}:${seconds}`
  },
},
mounted() {
  var me = this;
  // 網頁初始化之後,將系統時間丟入newDate這個變數內
  me.newDate = Math.floor(Date.now() / 1000);
}
);
</script>

3.使用watch 監控變數

<div id="app">
<p>使用 trigger 來觸發旋轉 box、並在三秒後改變回來</p>
<div class="box" :class="{'rotate': trigger }"></div>
<hr>
<button class="btn btn-outline-primary" v-on:click="trigger = true;">Counter</button>
</div>

<script>
var app = new Vue({
el: '#app',
data: {
	trigger: false,
},
watch: {
  // 使用watch監控 trigger,如果有變動的話,過三秒鐘後調整回來
  trigger: function() {
	var me = this;
	setTimeout(() => {
		me.trigger = false;
	}, 3000);
  }
}
);
</script>