Vue JS로 체크박스 필터를 만드는 방법

Hello Guys, 이 튜토리얼에서는 Vue JS 및 Bootstrap에서 간단한 체크박스 필터링 구성 요소를 만들 것입니다. 나는 또한 fontawesome을 사용하여 몇 가지 아이콘을 추가할 것입니다. 따라하려면 vue 3 프로젝트를 설정해야 합니다. vue JS 프로젝트를 아직 설정하지 않은 경우 vue CLI을 사용하여 설정할 수 있습니다.

Click Here - 이 프로젝트의 모든 코드가 포함된 Github 리포지토리를 봅니다.
Click Here codesandbox에서 작업 중인 이 프로젝트의 미리 보기를 봅니다.

vue CLI를 설치하고 새 프로젝트를 스캐폴딩한 후 먼저 이미지에 있는 것과 같이 검은색 배경을 프로젝트에 추가합니다.



public 폴더로 이동하여 index.html 파일을 클릭한 다음 이 작은 스타일 태그를 head 태그에 추가합니다.

<style>
      html,
      body {
        height: 100%;
        margin: 0;
        padding: 0;
      }
      #app {
        height: 100%;
        background-color: black;
      }
    </style>


이제 본론으로 들어가겠습니다



이 프로젝트는 4단계로 진행됩니다.
  • 부트스트랩 설치
  • fontawesome 설치
  • 사용자 인터페이스 구축
  • 기능 추가 중

  • 부트스트랩 설치



    부트스트랩 설치는 매우 간단하며 노드 패키지 관리자 "npm"으로 설치하는 경우 한 줄의 코드만 필요합니다. 필요한 모든 소스 파일을 자동으로 가져옵니다.

    npm install bootstrap
    


    Font Awesome 설치하기


  • fontawesome 설치의 첫 번째 단계는 npm을 사용하여 아이콘을 작동시키는 모든 유틸리티가 포함된 코어 패키지를 설치하는 것입니다.

  • npm i --save @fortawesome/fontawesome-svg-core
    


  • 다음으로 사용할 아이콘 패키지를 설치해야 합니다. 무료 아이콘 패키지의 경우. 다양한 아이콘 패키지는 Font awesome 웹 사이트에서 찾을 수 있습니다. 무료 솔리드, 무료 일반 및 무료 브랜드 아이콘 패키지를 설치하겠습니다.

  • # Free icons styles
    npm i --save @fortawesome/free-solid-svg-icons
    npm i --save @fortawesome/free-regular-svg-icons
    npm i --save @fortawesome/free-brands-svg-icons
    


  • fontawesome vue 구성 요소를 설치해야 합니다. 이것은 페이지에 아이콘을 배치하는 데 사용됩니다.

  • npm i --save @fortawesome/vue-fontawesome@latest-3
    


  • 아이콘 추가를 시작하려면 src/main.js 파일을 다음 코드 조각으로 바꿔야 합니다. 특정 아이콘을 가져온 다음 사용을 위해 라이브러리에 추가할 수 있습니다.

  • /* Set up using Vue 3 */
    import { createApp } from 'vue'
    import App from './App.vue'
    
    /* import the fontawesome core */
    import { library } from '@fortawesome/fontawesome-svg-core'
    
    /* import font awesome icon component */
    import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
    
    /* import specific icons */
    import { faUserSecret } from '@fortawesome/free-solid-svg-icons'
    
    /* add icons to the library */
    library.add(faUserSecret)
    
    createApp(App)
    .component('font-awesome-icon', FontAwesomeIcon)
    .mount('#app')
    


    사용자 인터페이스 구축



    이 챌린지의 HTML 마크업 스니펫은 다음과 같습니다. 이 마크업의 중요한 측면은 확인란이 데이터 메서드에서 확인된 배열로 모델링되었다는 것입니다. 확인란을 클릭할 때마다 해당 값은 해당 배열 안에 있습니다.

    <template>
      <div
        class="
          container-fluid
          d-flex
          flex-column
          aligns-items-center
          justify-content-center
          bg-dark
        "
      >
        <div class="row bg-dark border-bottom border-primary border-3">
          <div class="col-4 text-light pt-2 ps-4 d-flex justify-content-center">
            <div class="form-check">
              <input
                class="form-check-input"
                type="checkbox"
                value="happy"
                id="flexCheckDefault"
                v-model="checked"
                checked
              />
              <font-awesome-icon
                icon="fa-solid fa-face-grin-wide"
                style="color: yellow; font-size: 25px"
              />
            </div>
          </div>
          <div class="col-4 text-light pt-2 ps-4 d-flex justify-content-center">
            <div class="form-check">
              <input
                class="form-check-input"
                type="checkbox"
                value="meh"
                id="flexCheckDefault"
                v-model="checked"
                checked
              />
              <font-awesome-icon
                icon="fa-solid fa-face-meh"
                style="color: yellow; font-size: 25px"
              />
            </div>
          </div>
          <div class="col-4 text-light pt-2 ps-4 d-flex justify-content-center">
            <div class="form-check">
              <input
                class="form-check-input"
                type="checkbox"
                value="sad"
                id="flexCheckDefault"
                v-model="checked"
                checked
    
              />
              <font-awesome-icon
                icon="fa-solid fa-face-frown"
                style="color: yellow; font-size: 25px"
              />
            </div>
          </div>
        </div>
        <div class="container-fluid" v-for="item in computedItems" :key="item.id">
          <div class="row bg-dark p-3">
            <div
              class="
                col-4
                text-light
                d-flex
                aligns-items-center
                justify-content-center
              "
            >
              <font-awesome-icon
                v-bind="{ icon: item.icon }"
                :style="{ fontSize: 25 + 'px', color: item.color }"
              />
            </div>
            <div
              class="
                col-4
                text-light
                d-flex
                aligns-items-center
                justify-content-center
              "
            >
              <h5>{{item.text}}</h5>
            </div>
            <div
              class="
                col-4
                text-light
                d-flex
                aligns-items-center
                justify-content-center
              "
            >
              <input
                class="
                  bg-dark
                  text-light
                  border border-secondary border-3
                  rounded
                  ps-2
    
                "
                type="number"
                name=""
                id=""
                :value="item.id"
                style="width: 70%"
              />
            </div>
          </div>
        </div>
      </div>
    </template>
    


    기능 추가



    다음은 프로젝트의 스크립트 섹션입니다. 여기에는 기능이 포함되어 있습니다.
    가장 먼저 해야 할 일은 부트스트랩을 prioject로 가져오는 것입니다.

    // importing bootstrap into the project
    import "bootstrap/dist/css/bootstrap.min.css";
    import "bootstrap";
    


    내보내기 기본 배열 내에서 데이터, 마운트와 같은 다양한 수명 주기 방법을 사용하고 계산된 방법도 사용할 것입니다. 데이터 메서드 내에서 기본적으로 확인되는 항목 및 범주의 배열을 저장합니다.

    export default {
      name: "App",
      components: {},
    
      data() {
        return {
          checked: [
            "happy",
            "sad",
          ],
          items: [],
        };
      },
    
    };
    


    항목 배열은 비어 있으며 마운트된 메서드에서 오기 때문입니다.

    mounted() {
        this.items = [
          {
            id: 1,
            text: "food",
            category: "happy",
            icon: "fa-solid fa-burger",
            color: "yellow"
          },
    
          {
            id: 2,
            text: "games",
            category: "happy",
            icon: "fa-solid fa-chess",
            color: "purple"
    
          },
    
          {
            id: 3,
            text: "bills",
            category: "sad",
            icon: "fa-solid fa-money-bill-1-wave",
            color: "green"
          },
    
          {
            id: 4,
            text: "illness",
            category: "sad",
            icon: "fa-solid fa-bed-pulse",
            color: "red"
          },
        ];
      },
    


    마지막으로 compute 속성이 있습니다. 여기에 항목 배열을 필터링하는 기능이 있습니다. 여기서 메서드는 항목 배열과 확인된 배열을 기반으로 배열을 반환합니다.
    아무 것도 선택하지 않으면(선택한 배열이 비어 있음) 빈 배열을 반환합니다.
    확인된 배열에 무언가가 있으면 항목 배열을 필터링하고 확인된 배열에 범주가 있는 항목만 포함합니다.

    computed: {
        computedItems(){
          if (this.checked.length === 0) {
            return [];
          } else {
            return this.items.filter(item =>
              this.checked.indexOf(item.category) !== -1 
            );  
          }
        }
      }
    


    Vue JS로 간단한 체크박스 필터링 구성 요소를 만들고 fontawesome으로 멋진 아이콘을 추가하고 부트스트랩으로 스타일을 지정했습니다.

    읽어 주셔서 감사합니다



    - 세이 사무엘 예미-올로와라비

    좋은 웹페이지 즐겨찾기