• 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    미해결

펑션을 한 depth 더 들어가면 $호출이 안되는 이유가 뭘까요?

22.07.13 21:57 작성 조회수 137

0

안녕하세요. 강사님
 
<AUIGrid ref="fileGrid" class="grid-wrap"
style="height:35vh"
>
</AUIGrid>

선언 후

삭제시 함수를 호출하도록 해두었습니다.


async goDeleteFile(event) {
console.log('삭제@!!!!', event.item)
this.$message.success(`파일삭제 완료`); // 호출가능

this.$confirm({
title: '첨부를 삭제하시겠습니까?',
// content: 'Bla bla ...',
okText: '확인',
cancelText: '취소',
onOk() { // 이곳만 들어가면 $또는 $refs 접근이 불가능해짐
deleteFile({file_seq: event.item.file_seq}).then(
(res) => {
console.log('res====', res)
if (res.code == 200) {
console.log('삭제후 들어왔습니다.!@!@!@@!@!@!@!')
this.$refs.fileGrid.clearGridData() //호출 불가
this.$message.success(`파일삭제 완료`); //호출 불가
} else {
this.$message.error(res.message);
}
//return res.data;
},
error => {
console.log('error ==== ', error)
}
)
}
})
}

같은 내장 라이브러리 인 this.$message.success() 인데 goDeleteFile 함수안에서 바로 호출하면
호출이 되고 onOk() 펑션 안에서는 접근이 아예 안되는 이유 모르겠네요.

혹시 제가 vue의 사상을 이해하지 못하고 쓰는 것 같아 질문을 남겨봅니다.


 

답변 2

·

답변을 작성해보세요.

0

이건 vue 문제라기 보다는 지금 사용하고 계신 $confirm 안에 deleteFile 함수가 별도 스콥으로 구현되어 있기 때문입니다.

0

안녕하세요.

호출 불가라고 된 곳에서 console.log(this)를 출력해 보시면, 아마도 vue 인스턴스가 아니고 window 객체가 출력되고 있을 것 같습니다. 이 문제는 onOk() 함수가 별도의 scope으로 동작하기 때문에 그 안에서 this는 더이상 vue의 data나 함수를 접근할 수 있는 vue 인스턴스가 아니라 window 객체 혹은 지금 사용하고 계신 라이브러리를 지정하고 있을거라 생각합니다.

이민수님의 프로필

이민수

질문자

2022.07.15

답변 감사합니다.

이런식으로 depth가 들어가는 경우가 많을텐데 이럴때 vue 인스턴스를 넘겨주거나

전역으로 호출할 수 있는 방법이 없을까요?