어떻게 Vue 공공 구성 요 소 를 추상 화 합 니까?
먼저Demo와소스 코드.demo 는 브 라 우 저 에서 모 바 일 모드 로 탐색 하 는 것 이 좋 습 니 다)
구체 적 으로 실현 되 기 전에 저 는 이상 적 인 공용 구성 요소 가 어떤 것 인지 먼저 공유 하고 싶 습 니 다.
1.블랙박스 성,즉 당신 자신 을 제외 한 다른 개발 자 들 은 문 서 를 빠르게 읽 고 사용 한 후에 바로 시작 할 수 있 으 며 내부 실현 에 관심 을 가지 지 않 아 도 됩 니 다.
2.독립 성,즉 디 결합 을 잘 하여 부모 구성 요소 와 너무 많은 관련 이 없 음;
3.사용자 정의 성,입력 인터페이스 나 방법 을 외부 에 적당 하 게 노출 하여 사용자 정의 에 사용 하 는 동시에 이 속성 들 이 외부 에 입력 되 지 않 았 을 때의 기본 값 도 설정 해 야 합 니 다.
다음은 데모 의 디지털 키보드 구성 요소 가 어떻게 호출 되 는 지 블랙 박스 방식 으로 살 펴 보 겠 습 니 다.
App.vue
<template>
......
<keyboard @submit-event='handleSubmit' @change-event='handleChange'></keyboard>
</template>
<script>
import keyboard from 'Keyboard.vue';
export default {
data() {
return {
value: ''
};
},
methods: {
handleChange(value, currentValue) {
console.log(value, currentValue);
this.value = value;
},
handleSubmit() {
console.log('submit: ' + this.value);
}
}
}
</script>
위 와 같이 가장 기본 적 인 호출 이 완성 되 었 다.효 과 는 다음 과 같 습 니 다:이 어 1-6 과'확인'을 클릭 했다.다음 과 같다 면:
디지털 키보드 가 우리 가 예상 한 대로 작 동 하 는 것 을 볼 수 있 습 니 다.다음은 이 디지털 키보드 구성 요소 의 모든 입력 항목 을 분석 해 보 겠 습 니 다.
@change-event:이 이 벤트 는 사용자 정의 이벤트 입 니 다.부모 구성 요 소 는 v-on 을 통 해 감청 되 고 하위 구성 요소 내 부 는$emit 를 통 해 실 행 됩 니 다(더 많은 사용자 정의 이벤트 관련 내용 은 Vue 공식 튜 토리 얼 참조).
매번 디지털 버튼 과 체크 키 를 누 르 면 이 사건 이 발생 합 니 다.두 개의 매개 변 수 를 전달 합 니 다:value,누 른 문자 조합;현재 클릭 한 문자 입 니 다.부모 구성 요 소 는 handle Change 방법 을 통 해 이 사건 의 반전 내용 을 받 습 니 다.
@submit-event:"확인"키 를 누 르 면 이 사건 이 발생 합 니 다.파 라 메 터 를 전달 하지 않 고 부모 구성 요소 에 게"내 확인 버튼 이 클릭 되 었 습 니 다.무엇 을 하 시 겠 습 니까?알 아서 하 세 요.전에 누 른 숫자 는 change-event 를 통 해 전 달 됐 습 니 다"라 고 만 알려 줍 니 다.부모 구성 요 소 는 handle Submit 방법 으로 리 셋 을 받 습 니 다.
만약 이 두 가지 방법 만 쓴다 면 너무 성의 가 없 을 것 입 니 다.저 는 일부 장면 에 따라 다음 과 같은 몇 가지 사용자 정의 속성 을 작 성 했 습 니 다.
max:최대 입력 길이,초과 한 부분 은 change-event 이벤트 가 발생 하지 않 습 니 다.기본 값 은 제한 이 없습니다.
<keyboard max='6'></keyboard>
sp-key:사용자 정의 특수 문자,예 를 들 어 신분증 입력 시의"X"는 왼쪽 아래 공백 칸 에 추 가 됩 니 다.기본 값 은 없습니다.
<keyboard sp-key='X'></keyboard>
random:숫자 순 서 를 어 지 럽 히 는 지,은행 계좌 나 비밀번호 에 대한 입력 은 이런 장면 을 자주 볼 수 있 습 니 다.기본 false 입 니 다.
<keyboard random='true'></keyboard>
위의 몇 개의 사용자 정의 속성 과 사건 에서 우 리 는 부모 구성 요소 가 어떻게 하위 구성 요소 에 값 을 전달 하고 하위 구성 요소 의 변 화 를 감청 하 는 지 대충 알 았 습 니 다.그러나 부모 구성 요 소 는 어떻게 하위 구성 요소 내부 의 함 수 를 직접 호출 해 야 합 니까?우 리 는 아래 의 이 장면 을 보 았 다.
디지털 키보드 의 키보드 아이콘 은 클릭 하면 디지털 키 보드 를 거두 어 숨 깁 니 다.구성 요소 내부 에 키보드 의 팝 업 과 회 수 를 제어 하 는 방법 이 있 습 니 다.구성 요소 외부 에서 도 이 방법 을 사용 하려 면?예 를 들 어 부모 구성 요소 의 input 가 초점 을 가 져 올 때.
Vue 의 ref 속성 을 통 해 키보드 의 구성 요소 인용 을 얻 을 수 있 으 며 내부 방법 을 호출 할 수 있 습 니 다.다음 과 같 습 니 다.
$refs.[refName].keyboardToggle(true|false)
<template>
<input type='text' @focus='handleShowKeyboard($event)' />
<keyboard ref='kbref'></keyboard>
</template>
<script>
import keyboard from 'Keyboard';
export default {
//...
methods: {
handleShowKeyboard(e) {
e && e.preventDefault();
this.$refs.kbref.keyboardToggle(true);
}
}
}
</script>
위 와 같은 형식 으로 부모 구성 요소 컨 텍스트 에서 하위 구성 요소 내 방법 을 호출 할 수 있 습 니 다.$refs.[refName].handleInit()
디지털 키보드 구성 요소 내부 의 초기 화 방법 은 구성 요 소 를 다시 렌 더 링 하 는 데 사 용 됩 니 다.random 속성 이 true 이면 숫자 키 는 무 작위 배열 을 새로 고 칩 니 다.
$refs.[refName].handleClear()
이전에 입력 한 문자 조합 을 지우 고 change-event 를 실행 하고 빈 문자열 을 되 돌려 줍 니 다.
위 에서 이 구성 요소 의 모든 대외 속성 과 사건 을 공 유 했 습 니 다.우 리 는 이 구성 요소 내부 의 코드 를 보지 못 했 지만 이 를 완전히 사용 할 수 있 습 니 다.다음은 내부 실현 에 대해 이야기 하 겠 습 니 다.
먼저 레이아웃 을 살 펴 보 겠 습 니 다.저 는 키 보드 를 좌우 두 부분 으로 나 누 었 습 니 다.오른쪽 부분 은 더 이상 말 할 필요 가 없습니다.왼쪽 부분 은 하나의 키 배열 을 v-for 순환 을 통 해 생 성 하 는 것 입 니 다.
그렇다면 어떻게 0 과 9 사이 에 한 칸 을 비 울 수 있 을 까?키보드 구성 요 소 를 초기 화 하 는 방법 을 살 펴 보 자.
keyboard.vue
handleInit()
<template>
<div>
<div class='kb-left'>
<div class='kb-item' v-for='item in keyArr'>{{item}}</div>
<div class='kb-item kb-toggle'></div> //
</div>
<div class='kb-right'>
//...
</div>
</div>
</template>
<script>
export default {
data() {
return {
baseArr: []
}
},
computed: {
keyArr() {
this.handleInit();
return this.baseArr;
}
},
methods: {
handleInit() {
this.baseArr = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];
this.baseArr.splice(this.baseArr.length - 1, 0, '');
}
}
}
</script>
즉,키 배열 의 마지막 두 번 째 자리 에 빈 문 자 를 삽입 한 다음 순환 하여 버튼 을 생 성 하 는 것 이다.사용자 정의 매개 변수 가 어떻게 적용 되 는 지 살 펴 보 겠 습 니 다.sp-key
<script>
export default {
props: ['spKey'],
data() {
return {
baseArr: []
}
},
//....
methods: {
handleInit() {
let spKey = this.spKey;
this.baseArr = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];
this.baseArr.splice(this.baseArr.length - 1, 0, spKey);
}
}
}
</script>
구성 요소 내부 에서 props 속성 을 통 해 부모 구성 요소 가 전달 하 는 spKey 를 받 은 후 구성 요소 내 속성 과 방법 에서 this.spKey 를 통 해 접근 할 수 있 습 니 다.우선 spKey 값 이 유효한 지 판단 하고 빈 문 자 를 대신 하여 키 배열 의 마지막 두 번 째 항목 을 삽입 합 니 다.random
<script>
export default {
props: ['spKey', 'random'],
data() {
return {
baseArr: []
}
},
//....
methods: {
handleInit() {
let spKey = this.spKey;
this.baseArr = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];
if (this.random && this.random != 'false') {
this.baseArr.sort(function() {
return Math.random() - Math.random();
});
}
this.baseArr.splice(this.baseArr.length - 1, 0, spKey);
}
}
}
</script>
키 순 서 를 흐 트 러 뜨리 는 것 도 간단 하 다.배열 의 sort 방법 만 통과 하면 된다.sort 방법 은 함수 하 나 를 매개 변수 로 받 아들 일 수 있 습 니 다.함수 가 정 수 를 되 돌려 주면 앞 뒤 두 항목 의 위 치 를 교환 하고 함수 가 음 수 를 되 돌려 주면 교환 하지 않 습 니 다.따라서 두 개의 무 작위 수 를 상쇄 한 결 과 를 되 돌려 주면 키 배열 을 무 작위 로 정렬 할 수 있다.구성 요소 내부 에서 change-event 를 어떻게 터치 하 는 지 살 펴 보 겠 습 니 다.
handleInput()
<template>
<div>
<div class='kb-left'>
<div @click='handleInput(item)' class='kb-item' v-for='item in keyArr'>{{item}}</div>
<div class='kb-item kb-toggle'></div> //
</div>
//...
</div>
</template>
<script>
export default {
data() {
return {
inputStr: ''
}
},
//...
methods: {
handleInput(value) {
this.inputStr += value;
this.$emit('change-event', this.inputStr, value);
}
}
}
</script>
max 속성 이 증가 한 후 수정 방법 은 다음 과 같 습 니 다:
handleInput(value) {
let max = Number(this.max);
if (!isNaN(max) && this.inputStr.length+1 > max) {
return;
}
this.inputStr += value;
this.$emit('change-event', this.inputStr, value);
}
마지막 으로 퇴 격 삭제 가 어떻게 이 루어 지 는 지 살 펴 보 자.handleDelete()
handleDelete() {
let str = this.inputStr;
if (!str.length) return;
this.inputStr = str.substring(0, str.length - 1);
this.$emit('change-event', this.inputStr);
}
위의 예 는 모두 핵심 코드 의 세 션 이 고 다른 보조 함수 가 열거 되 지 않 았 습 니 다.완전한 코드 를 보 려 면소스 코드을 보십시오.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Vue Render 함수로 DOM 노드 코드 인스턴스 만들기render에서createElement 함수를 사용하여 DOM 노드를 만드는 것은 직관적이지 않지만 일부 독립 구성 요소의 디자인에서 특수한 수요를 충족시킬 수 있습니다.간단한 렌더링 예는 다음과 같습니다. 또한 v...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.