vue js를 이용하여 화면단을 개발하던 도중 keyup 이벤트를 이용하여 필터하는 기능을 구현해야 했는데, 이 기능을 서버단에서 처리할지 클라이언트단에서 처리할지 고민하다가 결국 클라이언트단에서 처리하기로 결정하고(필터되는 부분이 복잡하고 자원이 많이들었다면 서버단에서 처리했을 것 같긴하다.) 코드작성을 시작헀는데, 처음에는 v-model과 v-on:keyup 이벤트를 이용해서 다음과 같이 작성했었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
<%-- html -->
<table id="viewPoint">
<tr>
<td>
<input type="text" v-model="test" @keyup="filter">
</td>
<td v-for="item in targetList">{{item}}</td>
</tr>
</table>
<script>
(function() {
let vm = new Vue({
el: '#viewPoint',
data : {
targetList : [],
test : ''
},
methods : {
initialize : function() {
//초기화로직
},
filter : function() {
return vm.targetList.filter(a => a === test);
}
},
mounted: function () {
this.initialize();
},
});
}());
</script>
|
cs |
그런데 테스트하다보니 예상했던건 keyup이벤트와 v-model의 test라는 값의 변경이 바로바로 이뤄지지 않는 문제점과 저 test라는 변수는 필터할 대상값 이외에는 사용되지 않기에 조금 컴팩트하게 작성하고 싶어서 검색해본 결과 공식문서에 vue에서 원본 DOM에 접근할 수 있게 해주는 $event라는 특별한 변수가 있어서 그걸 사용하기로 하고 다음과 같이 코드를 변경했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<%-- html -->
<table id="viewPoint">
<tr>
<td>
<input type="text" @keyup="filter($event.target.value)">
</td>
<td v-for="item in targetList">{{item}}</td>
</tr>
</table>
<script>
(function() {
let vm = new Vue({
el: '#viewPoint',
data : {
targetList : [],
},
methods : {
initialize : function() {
//초기화로직
},
filter : function(value) {
return vm.targetList.filter(a => a === value);
}
},
mounted: function () {
this.initialize();
},
});
}());
</script>
|
cs |
코드만 보면 크게 바뀐건 없다 기존 v-model로 존재하던 test라는 변수가 빠지고 직접 dom의 이벤트가 발생한 곳의 밸류를 필터링하는 함수에 전달한 뒤 필터하는 기능으로 변경된게 끝이다.
이렇게 v-model를 이용하던것을 직접 dom의 값을 찾아서 변수로 전달하는것으로 변경했는데, 어떤게 더 좋은지는 잘 모르겠지만 내 기준에서 불필요하게 재사용하지않는 변수를 선언해놓고 쓰기보단 직접 dom에서 값을 받아서 변수로 전달하는게 깔끔하다고 생각된다.
'JAVASCRIPT' 카테고리의 다른 글
vue js modal에서 부모 컴포넌트 접근하기 (0) | 2022.06.29 |
---|---|
javascript Object의 필터링 구현 (0) | 2022.03.08 |
javascript Object 자료형의 값을 비교하는 방법 (0) | 2021.05.07 |
Vue js에서 @click과 @change를 사용할 때 주의점 (0) | 2021.04.21 |
[Jquery ]를 이용해서 열에있는 모든 라디오버튼 일괄체크 구현 (0) | 2021.04.09 |