vueJS v-if 질문 있습니다.

조회수 405회

v-if 관하여 막히는 부분이 있어 질문 드립니다.

<ol class="fileNames" style="list-style: none; padding-left:0px;">
                    <li v-for="(fileName, index) in fileNames">
                        <div v-if="fileUploadedCheck(index)" class="p-3 mb-2 bg-success text-dark">
                            <span>[[ fileName ]]</span>
                        </div> 
                        <div v-else class="p-3 mb-2 bg-light text-dark">
                            <span>[[ fileName ]]</span>
                            <button type="button" class="close" aria-label="Close">
                                <span aria-hidden="true" v-on:click="remove_todo(index)">&times;</span>
                            </button>
                        </div>
                    </li>
</ol>

methods부분

fileUploadCheck : function(index){
                    return this.fileUploadedCheckList[index];
                },

3 번째 줄에 fileuploadcheck함수안의 fileuploadedchecklist index키의 value가 true이면 v-if클래스에 맞는 부트스트랩 스타일을 표현하는 html코드입니다.

맨 처음은 파일이 업로드 되지 않은 상태이기 때문에 v-else가 시행되는건 알겠는데 업로드를 하고 fileuploadedchecklist의 index 밸류가 true로 바뀐 후에도 v-else의 스타일을 유지하고 있는 부분에서 어려움을 느낍니다. 어떻게 해야 실시간으로 바뀐 리스트 값을 확인 하고 스타일이 바뀔까요?

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    배열 요소를 object로 변경하시면 의도한대로 작동합니다.

    아마 작성자분의 코드에서 fileUploadedCheckList는 아래와 같은 구조를 가지고있을텐데요,

    fileUploadedCheckList: [
        false,
        false,
        false,
        false,
        false,
        ...
    ]
    

    이를 아래와같은 구조로 변경하신 후

    fileUploadedCheckList: [
        { isUploaded: false },
        { isUploaded: false },
        { isUploaded: false },
        { isUploaded: false },
        { isUploaded: false },
        ...
    ]
    

    이런식으로 렌더링 처리하면 됩니다.

    <li v-for="(check, index) in fileUploadedCheckList" :key="index">
        <div v-if="check.isUploaded">Hello!</div>
    </li>
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)