Vue 텍스트 모호 일치 기능 어떻게 구현

모호 일치 기능 은 드 롭 다운 메뉴 의 구성 요소 에 많이 사용 되 기 때문에 디 테 일 한 부분 이 어떻게 실현 되 는 지 데모 몇 개 를 쓸 계획 입 니 다.
1.가장 간단 한 모호 일치:속성 계산

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <input type="text" v-model="message">
    <ul>
      <li v-for="(option, index) in matchedOptions" :key="index">{{ option }}</li>
    </ul>
  </div>
  <script src="./vue.js"></script>
  <script>
    new Vue({
      el: '#app',
      data: {
        message: '',
        options: ['html', 'css', 'javascript']
      },
      computed: {
        matchedOptions() {
          if (this.message !== '') {
            return this.options.filter(option => option.includes(this.message))
          }
          return this.options
        }
      }
    })
  </script>
</body>
</html>
위의 예 에서 계산 속성 matched Options 는 텍스트 상자 내용 message 변화 시 options 의 데 이 터 를 선별 합 니 다.효과 도 는 다음 과 같 습 니 다.

2.사용 역할 영역 슬롯 실현
플러그 인 을 사용 하 는 것 은 주로 이 기능 을 구성 요소 화하 기 위해 서 입 니 다.select 구성 요소 에 option 을 삽입 한 다음 option 은 역할 영역 플러그 인 을 통 해 select 에서 텍스트 값 을 가 져 옵 니 다.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <my-select>
      <template #default="{ message }">
        <ul>
          <li v-for="(option, index) in options" :key="index" v-show="option.includes(message)">{{ option }}</li>
        </ul>
      </template>
    </my-select>
  </div>
  <script src="./vue.js"></script>
  <script>
    Vue.component('my-select', {
      template: `
        <div class="my-select">
          <input type="text" v-model="message">
          <slot :message="message"></slot>
        </div>
      `,
      data() {
        return {
          message: ''
        }
      }
    })
    new Vue({
      el: '#app',
      data: {
        options: ['html', 'css', 'javascript']
      }
    })
  </script>
</body>
</html>
전역 적 으로 my-select 구성 요 소 를 등록 한 후 app 의 message 데 이 터 를 삭제 할 수 있 습 니 다.v-show 를 사용 하여 옵션 의 디 스 플레이 를 제어 할 수 있 습 니 다.실행 효 과 는 계산 속성 과 같 습 니 다.단점 은 단일 파일 화 할 수 없다 는 것 이다.
3.방송 과 배포 방법 을 혼합 하여 독립 구성 요소 에서 모호 한 매 칭 을 실현 합 니 다.
우선 emitter 파일 이 필요 합 니 다:

/**
 *        
 * @param {string} componentName     
 * @param {string} eventName    
 * @param {...any} params     
 */
function _broadcast(componentName, eventName, ...params) {
  this.$children.forEach(child => {
    if (child.$options.name === componentName) {
      child.$emit(eventName, ...params)
    }
    _broadcast.call(child, componentName, eventName, ...params)
  })
}

/**
 *        
 * @param {string} componentName     
 * @param {string} eventName    
 * @param {...any} params     
 */
function _dispatch(componentName, eventName, ...params) {
  if (this.$parent) {
    if (this.$parent.$options.name === componentName) {
      this.$parent.$emit(eventName, ...params)
    }
    _dispatch.call(this.$parent, componentName, eventName, ...params)
  }
}

/**
 * mixin
 */
export default {
  methods: {
    broadcast(componentName, eventName, ...params) {
      _broadcast.call(this, componentName, eventName, ...params)
    },
    dispatch(componentName, eventName, ...params) {
      _dispatch.call(this, componentName, eventName, ...params)
    }
  }
}
여기 있 는$children 과$parent 는 dom 부자 관 계 를 가 진 vue 구성 요 소 를 말 합 니 다.
마지막 으로 검색 조건 을 설정 하여 하위 구성 요소 의 표시 와 숨 김 을 제어 하면 실시 간 퍼 지 검색 을 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기