[Quasar & Capacitor] 길게 눌러서 삭제하기 구현하기 + 진동
in Javascript on Javascript, Vue, Quasar
사전작업
진동기능과 quasar 에서 제공하는 컨펌 다이얼로그를 쓰기 위해 사전 작업이 필요하다.
# 진동을 위해
# 프로젝트 루트에 @capacitor/core 패키지 설치
npm i @capacitor/core
# src-capacitor\android\app\src\main\AndroidManifest.xml 에 진동관련 권한 추가
<uses-permission android:name="android.permission.VIBRATE" />
# 다이얼로그 플러그인 설정
# quasar.conf.js 파일 framework - plugins 배열에 "Dialog" 항목 추가
# ex
framework: {
iconSet: "material-icons",
lang: "ko-kr",
config: {},
importStrategy: "auto",
plugins: ["Dialog"]
},
참고 소스
quasar 문서에서는 길게 눌러서 실행하는 함수 호출시 파라메터를 같이 넘기는 예제가 없었다.
늘 하던데로 함수 호출시 파라메터를 넘기니 이상하게 동작했다. 찾아보니 대상 호출 함수를 참고 소스 처럼 함수를 리턴하게 작성하면 된다.
※ 리턴하는 함수 작성시 function() 으로 선언하지 말고 arrow function을 써야 컴포넌트 내부 data 를 접근해서 변경할 수 있다.
<template>
<q-page class="flex flex-center">
<!-- 1.5 초 동안 눌렀을때 removeItem 호출 -->
<q-btn v-for="item in items" :key="item.id" v-touch-hold:1500.mouse="removeItem(item.id)" color="primary" :label="item.name" />
</q-page>
</template>
<script>
import { Plugins } from '@capacitor/core';
const { Haptics } = Plugins;
export default {
name: 'PageIndex',
data() {
return {
items: [
{
id: 1,
name: '아이템1',
},
{
id: 2,
name: '아이템2',
},
{
id: 3,
name: '아이템3',
},
{
id: 4,
name: '아이템4',
},
{
id: 5,
name: '아이템5',
},
],
};
},
methods: {
removeItem(id) {
// arrow function 으로 만들어야 this 로 컴포넌트 데이터를 접근할 수 있다.
return (evt) => {
// 길게 누른 이벤트에 대한 정보는 evt 변수로 접근할 수 있다.
// 진동시킨 다음 컨펌창 띄우기
Haptics.vibrate();
this.$q
.dialog({
title: '확인',
message: '지울래요?',
cancel: true,
persistent: true,
})
.onOk(() => {
this.items = this.items.filter((item) => item.id !== id);
});
};
},
},
};
</script>