vue 의 데이터 양 방향 바 인 딩 을 전면적으로 분석 합 니 다.
4557 단어 vue데이터양 방향 바 인 딩
2.Object.defineProerty();
var obj = {};
Object.defineProperty(obj,"hello",{
enumerable: true, // for -- in ( );
configurable: true, // delete
get(){ // ,
return this.val;
},
set(newVale){ // ( : )
this.val = newVale + 5;
console.log(this.val); // 10
}
})
obj.hello = 5;
console.log(obj.hello) ; // 10
3.간단 한 양 방향 연결 실현
<input type="text" id="a">
<div id="b"></div>
<script type="text/javascript">
var obj = {};
Object.defineProperty(obj,`value`,{
enumerable: true,
configurable: true,
get(){
return this.val;
},
set(newValue){
document.getElementById(`b`).innerText = newValue;
this.val = newValue; //66
}
});
document.getElementById(`a`).addEventListener(`input`,function(event){
var text = event.target.value; //66
obj.value = text;
},false)
</script>
이런 방식 은 간단 하고 거 칠 어서 DOM 조작 을 통 해 직접 귀속 을 완성 한다.나 는 분명히 누군가가 네가 이렇게 쓰 는 것 이 input 사건 에서 Id 가 B 인 DOM 요소 에 직접 값 을 부여 하 는 것 이 쓸데없는 짓 이 아니 냐 고 생각 할 것 이 라 고 생각한다.아래 틀 에서 우리 가 어떻게 실현 해 야 하 는 지 보 세 요.4.간단 한 실현 v-model
먼저 문서 의 실제 요소 노드,즉 VUE 의 실제 열 화 된 VUE 의 요소 마 운 트 지점(el)을 가 져 와 야 합 니 다.createDocumentFragment 를 통 해 문서 조각 을 만 들 고 분석 작업 이 끝 난 후 조각 을 DOM 에 배치 합 니 다.
<div id="app">
<input type="text" id="a" v-model="text">
{{text}}
</div>
<script type="text/javascript">
function Model(node, vm) {
if(node) {this.$frag = this.nodeToFragment(node, vm);
return this.$frag;
}
}
Model.prototype = {
construtor:'Model',
nodeToFragment: function(node, vm) {
var self = this;
var frag = document.createDocumentFragment();
var child;
while(child = node.firstChild) {
self.moelElement(child, vm);
frag.appendChild(child);
// fragment ,child 。
// child append , child frag ,
// child 。 ,
}
return frag;
},
moelElement: function(node, vm) {
var reg = /\{\{(.*)\}\}/; // {{}} ()
//
if(node.nodeType === 1) {
var attr = node.attributes;
//
for(var i = 0; i < attr.length; i++ ) {
if(attr[i].nodeName == 'v-model') {
var name = attr[i].nodeValue; // v-model
node.addEventListener('input', function(e) {
// data , set
vm.data[name]= e.target.value;
});
node.value = vm.data[name]; // data node
node.removeAttribute('v-model');
}
};
}
// text
if(node.nodeType === 3) {
if(reg.test(node.nodeValue)) {
var name = RegExp.$1; // () 。 $1
name = name.trim();
node.nodeValue = vm.data[name]; // data node
}
}
},
}
function Vue(options) {
this.data = options.data;
var data = this.data;
var id = options.el;
var dom =new Model(document.getElementById(id),this);
// , dom app
document.getElementById(id).appendChild(dom);
}
var vm = new Vue({
el: 'app',
data: {
text: 'hello world'
}
});
</script>
이곳 에 서 는 주로 VUE 에서 명령 에 대한 처 리 를 배 웠 다.여기까지 사용자 정의 명령 만 추가 할 수 있 습 니 다.사용자 정의 명령 이 어떻게 이 루어 졌 는 지도 알 게 되 었 다.물론 데이터 의 양 방향 연결 은 아직 실현 되 지 않 았 다.위 에서 말 한 것 은 편집장 이 소개 한 vue 의 데이터 양 방향 연결 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.