<div id="example">
<p>Original message: "{{ message }}"</p>
<!-- output : Hello -->
<p>Computed reversed message: "{{ reversedMessage }}"</p>
<!-- output : olleH -->
</div>
var vm = new Vue({
el: '#example',
data: {
message: 'Hello'
},
computed: {
// 계산된 getter
reversedMessage: function () {
// `this`는 'vm'을 가리킴
return this.message.split('').reverse().join('')
}
}
})
Vue는 vm.reversedMessage가 vm.message에 의존하는 것을 안다.
따라서 vm.message이 바뀔 때 vm.reversedMessage에 의존하는 바인딩은 모두 업데이트한다.
console.log(vm.reversedMessage) // output : 'olleH'
vm.message = 'Goodbye'
console.log(vm.reversedMessage) // output : 'eybdooG'
Data.now()
처럼 아무 곳에도 의존하지 않는 computed 속성의 경우 절대로 업데이트 되지 않음// ...
computed: {
fullName: {
// getter
get: function () {
return this.firstName + ' ' + this.lastName
},
// setter
set: function (newValue) {
var names = newValue.split(' ')
this.firstName = names[0]
this.lastName = names[names.length - 1]
}
}
}
// ...
이제 vm.fullName = 'John Doe'를 실행하면 설정자가 호출되고,
vm.firstName과 vm.lastName이 그에 따라 업데이트 된다.