계산된 속성
기본 예제
템플릿에서 사용하는 표현식은 편리하지만 단순한 연산만 해야합니다.
<div id="example">{{ message.split('').reverse().join('') }}</div>
이렇게 복잡한 로직은 계산된 속성을 사용해야 합니다.
|
|
이렇게요
reversedMessage 를 우리는 computed에서 선언했습니다.
vm.reversedMessage 는 getter 메세지로 반환된다.
계산된 캐싱 vs 메소드
|
|
표현식에서 메소드를 호출하면 계산된 결과와 같은걸 알 수 있습니다.
계산된 속성은 종속성에 따라 캐시가 된다.
message가 변경되지 않는 한, reverseMessage는 바로 반환됩니다.
computed: {now: function () {return Date.now()}}
이것도 Date.now가 변경되지 않으니 바로 반환됩니다.
캐싱이 왜 필요하냐면, 많은 연산을 하게되면, 서버에 무리가 가기 때문에 캐싱을 하는게 좋다.
계산된 속성 vs 감시된 속성
Vue 인스턴스는 속성을 감시하는게 가능하다.(데이터가 변경될때)
|
|
firstName의 값이 변경될 때 마다
firstName: function (val) {this.fullName = val + ' ' + this.lastName},
val 파라매터로 값을 받고, this.fullName = val + ' ' + this.lastName
이걸 실행한다.
var vm = new Vue({el: '#demo',data: {firstName: 'Foo',lastName: 'Bar'},computed: {fullName: function () {return this.firstName + ' ' + this.lastName}}})
위 코드와 위 코드는 비슷합니다.
계산된 속성이 더 좋은거 같습니다.
계산된 Setter
computed: {fullName: {// getterget: function () {return this.firstName + ' ' + this.lastName},// setterset: function (newValue) {var names = newValue.split(' ')this.firstName = names[0]this.lastName = names[names.length - 1]}}}
computed는 getterd와 setter를 만들어줄 수 있습니다.
감시자
대부분 계산된 속성이 필요하지만. 감시자가 더 좋을 때가 있습니다.
<div id="watch-example"><p>yes/no 질문을 물어보세요:<input v-model="question"></p><p>{{ answer }}</p></div>
에제입니다.
<!-- 이미 Ajax 라이브러리의 풍부한 생태계와 범용 유틸리티 메소드 컬렉션이 있기 떄문에, --><!-- Vue 코어는 다시 만들지 않아 작게 유지됩니다. --><!-- 이것은 또한 당신이 사용하기 친숙할 것을 선택할 수 있는 자유를 줍니다. --><script src="https://unpkg.com/axios@0.12.0/dist/axios.min.js"></script><script src="https://unpkg.com/lodash@4.13.1/lodash.min.js"></script><script>var watchExampleVM = new Vue({el: '#watch-example',data: {question: '',answer: '질문을 하기 전까지는 대답할 수 없습니다.'},watch: {// 질문이 변경될 때 마다 이 기능이 실행됩니다.question: function (newQuestion) {this.answer = '입력을 기다리는 중...'this.getAnswer()}},methods: {// _.debounce는 lodash가 제공하는 기능으로// 특히 시간이 많이 소요되는 작업을 실행할 수 있는 빈도를 제한합니다.// 이 경우, 우리는 yesno.wtf/api 에 액세스 하는 빈도를 제한하고,// 사용자가 ajax요청을 하기 전에 타이핑을 완전히 마칠 때까지 기다리길 바랍니다.// _.debounce 함수(또는 이와 유사한 _.throttle)에 대한// 자세한 내용을 보려면 https://lodash.com/docs#debounce 를 방문하세요.getAnswer: _.debounce(function () {if (this.question.indexOf('?') === -1) {this.answer = '질문에는 일반적으로 물음표가 포함 됩니다. ;-)'return}this.answer = '생각중...'var vm = thisaxios.get('https://yesno.wtf/api').then(function (response) {vm.answer = _.capitalize(response.data.answer)}).catch(function (error) {vm.answer = '에러! API 요청에 오류가 있습니다. ' + error})},// 사용자가 입력을 기다리는 시간(밀리세컨드) 입니다.500)}})</script>
이 예제는 question을 감시하고 methods에서 getAnswer을 실행해줍니다.
watch는 비동기 연산을 합니다.
'이전 글 > 2017-10-13 이전 글' 카테고리의 다른 글
2017-07-02 작업 (0) | 2017.07.02 |
---|---|
2017-07-02 스터디 내용 (0) | 2017.07.02 |
공부에 필요한 C언어 지식 (0) | 2017.07.01 |
2017-07-01 작업목록 (0) | 2017.07.01 |
2017-06-30 작업 목록 (0) | 2017.06.30 |