vue v-model
vue에서 v-model은 문법 설탕이다. 이른바 문법 설탕은 다른 기초 기능에 대한 2차 봉인으로 인해 발생하는 기능이다.간단하게 말하면 v-model 자체는 부모 구성 요소가 하위 구성 요소의 상태와 상태를 바꾸는 이벤트에 대한 봉인입니다.그 실현 원리는 두 부분으로 나뉜다.
props를 통해 서브어셈블리 상태 설정하기
하위 구성 요소가 보내는 이벤트를 감청하여 부모 구성 요소의 상태를 바꾸어 하위 구성 요소의props 값에 영향을 줍니다
상기 두 부분을 통해 부모 구성 요소의 상태와 하위 구성 요소의 상태를 귀속시키는 효과를 실현하였다.
1.1 demo
v-model 사용 예
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>v-model </title>
<script type="text/javascript" src="vue.js"></script>
</head>
<body>
<div id="app">
<div> :</div>
<div style="margin-bottom: 15px;">{{content}}</div>
<Child v-model="content"></Child>
</div>
<template id="input">
<div>
<div> :</div>
<input :value="value" @input="contentChange" />
</div>
</template>
<script type="text/javascript">
var Child = {
template: "#input",
props: {
value: {
type: String,
required: true
}
},
methods: {
contentChange(value){
this.$emit("input", value.target.value);
}
}
};
var vueInstance = new Vue({
el: "#app",
components: {Child},
data: {
content: ""
}
})
</script>
</body>
</html>
브라우저에서 상기 html 페이지를 열면 실시간 효과를 볼 수 있습니다. 하위 구성 요소의 input 상자에 내용을 입력하면 상위 구성 요소 구역에 실시간으로 표시되고 하위 구성 요소의 상태와 상위 구성 요소의 상태가 실시간으로 연결되는 효과를 볼 수 있습니다.2. v-model 기본 감청 이벤트 수정 및 프로필 이름 설정
v-model 명령은 기본적으로 하위 구성 요소에 설정된prop 이름이value입니다. 하위 구성 요소의 input 이벤트를 기본적으로 감청합니다. 위의 demo에서 하위 구성 요소contentChange 함수에서 보내는 이벤트 이름을 수정하면 부모 구성 요소에서 하위 구성 요소의 입력을 실시간으로 얻을 수 없습니다.
Vue에서는 서브어셈블리에 모델 속성을 정의하여 이 두 매개변수의 이름을 수정하는 기능을 제공하지만, 이 기능은 버전 2.2 이상에서만 사용할 수 있습니다. 아래와 같습니다.
2.1 demo
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>v-model </title>
<script type="text/javascript" src="vue.js"></script>
</head>
<body>
<div id="app">
<div> :</div>
<div style="margin-bottom: 15px;">{{content}}</div>
<Child v-model="content"></Child>
</div>
<template id="input">
<div>
<div> :</div>
<input :value="content" @input="contentChange" />
</div>
</template>
<script type="text/javascript">
var Child = {
template: "#input",
model: {
prop: "content",
event: "contentChanged"
},
props: {
content: {
type: String,
required: true
}
},
methods: {
contentChange(value){
this.$emit("contentChanged", value.target.value);
}
}
};
var vueInstance = new Vue({
el: "#app",
components: {Child},
data: {
content: ""
}
})
</script>
</body>
</html>
3. Vue에서 v-model 명령 처리 분석Vue2.0 버전을 바탕으로 저희가 라벨에 v-model 속성을 써서 vue 구성 요소에 응답하는 절차를 분석합니다.
3.1 분석 섹션
3.1.1 HTML을 AST라고 해석할 때 HTML에서 태그의 속성이 해석됨
function processAttrs(el){
...
name = name.replace(dirRE, '')
// parse arg
const argMatch = name.match(argRE)
if (argMatch && (arg = argMatch[1])) {
name = name.slice(0, -(arg.length + 1))
}
addDirective(el, name, value, arg, modifiers)
...
}
지령의 이름을 추출합니다. v-model의 지령 이름name은 모델입니다. 그리고 실례적인 지령에 추가합니다.3.1.2 인스턴스 명령에 명령 관련 내용 추가
export function addDirective (
el: ASTElement,
name: string,
value: string,
arg: ?string,
modifiers: ?{ [key: string]: true }
) {
(el.directives || (el.directives = [])).push({ name, value, arg, modifiers })
}
실례적인 지령 속성에 상응하는 지령을 추가하면 html상의 속성에서 Vue실례상의 지령 형식으로의 전환을 실현할 수 있다3.2 명령 설정 섹션
html를 AST라고 해석한 후에 실례에 대응하는directives 속성에 우리가 설정한 v-model 관련 값이 있습니다. 매개 변수 값value를 포함하여name는 모델입니다.
3.2.1 호출 명령의 구조 함수
function genDirectives (el: ASTElement): string | void {
const dirs = el.directives
if (!dirs) return
let res = 'directives:['
let hasRuntime = false
let i, l, dir, needRuntime
for (i = 0, l = dirs.length; i < l; i++) {
dir = dirs[i]
needRuntime = true
const gen = platformDirectives[dir.name] || baseDirectives[dir.name]
if (gen) {
// compile-time directive that manipulates AST.
// returns true if it also needs a runtime counterpart.
needRuntime = !!gen(el, dir, warn)
}
...
}
v-model 명령의 구조 함수에서tag의 종류에 따라 서로 다른 창설 함수를 만들 수 있습니다. 만약에 사용자 정의 명령이 하위 구성 요소에 속성을 추가해야 한다면 이 함수에서 조작해야 합니다3.2.2 일반 tag에서의 v-model 지령 구조 과정
function genDefaultModel
el: ASTElement,
value: string,
modifiers: ?Object
): ?boolean {
...
addProp(el, 'value', isNative ? `_s(${value})` : `(${value})`)
addHandler(el, event, code, null, true)
...
}
3.3.1 createPatchFunction 통합 처리 명령의 갈고리 함수
createPatchFunction 함수는 patch 함수를 반환합니다. patch 처리 과정에서 명령의 갈고리 함수를 호출합니다.
4.1 컴파일 프로세스
patch 함수에서 통일된 갈고리 함수를 호출하여 지령을 촉발하는 갈고리 함수를 통해 상응하는 기능을 실현한다
이상은 vue v-model에 대한 상세한 내용입니다. vue v-model에 대한 더 많은 자료는 저희 다른 관련 글에 주목하세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fastapi websocket 및 vue 3(Composition API)1부: FastAPI virtualenv 만들기(선택 사항) FastAPI 및 필요한 모든 것을 다음과 같이 설치하십시오. 생성main.py 파일 및 실행 - 브라우저에서 이 링크 열기http://127.0.0.1:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.