> 웹 프론트엔드 > JS 튜토리얼 > ES6는 Vue를 모방하여 양방향 바인딩 기능을 구현합니다.

ES6는 Vue를 모방하여 양방향 바인딩 기능을 구현합니다.

php中世界最好的语言
풀어 주다: 2018-04-27 15:38:57
원래의
2036명이 탐색했습니다.

이번에는 ES6에서 Vue를 모방한 양방향 바인딩 기능을 가져오겠습니다. ES6에서 Vue를 모방하여 양방향 바인딩 기능을 구현하는 방법에 대한 노트는 무엇입니까? 봐.

최종 효과는 다음과 같습니다.

Constructor(생성자)

기본 el, 데이터, 메소드를 포함한 TinyVue 객체를 구성합니다.

class TinyVue{
 constructor({el, data, methods}){
  this.$data = data
  this.$el = document.querySelector(el)
  this.$methods = methods
  // 初始化
  this._compile()
  this._updater()
  this._watcher()
 }
}
로그인 후 복사

Compiler(컴파일)

을 사용하여 입력 상자와 드롭다운 상자의 v-model과 요소의 클릭 이벤트 @click에 바인딩합니다.

먼저 이벤트를 로드하는 함수를 만듭니다.

// el为元素tagName,attr为元素属性(v-model,@click)
_initEvents(el, attr, callBack) {
 this.$el.querySelectorAll(el).forEach(i => {
  if(i.hasAttribute(attr)) {
   let key = i.getAttribute(attr)
   callBack(i, key)
  }
 })
}
로그인 후 복사

입력 상자 이벤트 로드

this._initEvents('input, textarea', 'v-model', (i, key) => {
 i.addEventListener('input', () => {
  Object.assign(this.$data, {[key]: i.value})
 })
})
로그인 후 복사

선택 상자 이벤트 로드

this._initEvents('select', 'v-model', (i, key) => {
 i.addEventListener('change', () => Object.assign(this.$data, {[key]: i.options[i.options.selectedIndex].value}))
})
로그인 후 복사

클릭 이벤트 로드

클릭 이벤트는 메서드의 이벤트에 해당합니다

this._initEvents('*', '@click', (i, key) => {
 i.addEventListener('click', () => this.$methods[key].bind(this.$data)())
})
로그인 후 복사

업데이트 보기(업데이트 프로그램)

마찬가지로 먼저 입력, 텍스트 영역 값, 선택 값, p의 innerHTML을 포함한 다양한 요소의 뷰를 처리하는 공개 함수를 만듭니다. 여기 구현 방법이 좀 낮아서 정기적인 교체만 생각합니다 {{text}}

_initView(el, attr, callBack) {
 this.$el.querySelectorAll(el, attr, callBack).forEach(i => {
  if(i.hasAttribute(attr)) {
   let key = i.getAttribute(attr),
    data = this.$data[key]
   callBack(i, key, data)
  }
 })
}
로그인 후 복사

Listener(watcher)

데이터 변경 후 뷰 업데이트

this._initView('input, textarea', 'v-model', (i, key, data) => {
 i.value = data
})
로그인 후 복사

TinyVue 모든 코드

this._initView('select', 'v-model', (i, key, data) => {
 i.querySelectorAll('option').forEach(v => {
  if(v.value == data) v.setAttribute('selected', true)
  else v.removeAttribute('selected')
 })
})
로그인 후 복사

믿습니다 이 기사의 사례를 읽은 후 방법을 익혔습니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요! 추천 자료:

jQuery$. 및 $(). 사용법에 대한 자세한 설명

vue에서 새로 고침 및 로딩 시 v-cloak 깜박임을 처리하는 방법

위 내용은 ES6는 Vue를 모방하여 양방향 바인딩 기능을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿