Vue.js를 이용하여 체크박스의 모두선택기능 기능을 만들어보자.
화면코드
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
| <table> <colgroup> <col width="10%"> <col width="*"> <col width="*"> </colgroup> <thead> <tr> <th><input type="checkbox" name="checkAll" v-model="isCheckAll"></th> <th>고유번호</th> <th>이름</th> </tr> </thead> <tbody v-if="mainDataset.getRowCount() == 0"> <tr> <td colspan="8">조회 된 데이터가 없습니다.</td> </tr> </tbody> <tbody v-else> <tr v-for="(item, idx) in mainDataset.data"> <td><input type="checkbox" v-model="userList" :value=item.userNo></td> <td>{{item.userNo}}</td> <td>{{item.userNm}}</td> </tr> </tbody> </table>
|
스크립트 코드
모달창을 열때마다 isCheckAll를 false로 초기화해주고 watch로 isCheckAll의 value가 변할때 메서드 checkAll()를 실행한다.
여기서 핵심은 watch로 기존 값과 변경된 값을 지켜보고있다는 점이다.
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
| var app = new Vue({ el: '#userPopup', data: { searchParams: { searchText: "", pageNumber: 1 }, isCheckAll: false, userList: [], mainDataset: new Dataset(), mainDatasetPaging: new PagingSet(5, 10), }, watch: { "isCheckAll": { handler: function(val, oldVal) { this.checkAll(); } } }, mounted: function() { var self = this; $(this.$refs.userPopup).on("shown.bs.modal", function() { self.isCheckAll = false; }); }, methods: { checkAll: function() { var self = this; app.userList = []; if (self.isCheckAll) { _.forEach(self.mainDataset.data, function(obj) { app.userList.push(obj.userNo); }); } }, } })
|
이렇게해면 체크박스 전체선택시 각 체크박스의 userNo값이 userList배열에 담긴다!