毎日上走分システム開発
2771 ワード
この命令は、毎日上走分システム開発(T:I 8 O-285 I-O 282)とそのサブ要素のコンパイルプロセスをスキップします.つまり、このノードとそのサブノードを静的ノードとして処理します.例えば、
コンパイルの結果は次のとおりです.
対応するHTMLノードツリーは次のとおりです.
title属性も特性として処理する、コンソールにappを入力する.message="Hello Vue!"レンダリングの変化を見てみましょう.
v-pre対応のDOMノードでは、データが変化してもレンダリングがトリガーされないことがわかります.
ソース分析
テンプレートの解析中にラベルの開始に遭遇するとstart関数が実行され、{{message}}に対して
start:function start(tag,attrs,unary){//9136行目ラベル開始時にここまで解析
ProcessRawAttrsプロパティをASTオブジェクトのattrsプロパティに保存するには、次のようにします.
function processRawAttrs(//9317行目v-preプロパティが設定されている場合はvar l=el.attrsList.length;if(l){
} else if (!el.pre) {
}}後でgendata()関数の実行時にattr属性にまとめられ、最後にrenderが対応するDOMノードにレンダリングされるとそのattr属性が対応するノードに保存され、例のテンプレートがrender関数にレンダリングされるのは以下の通りです.
with(this){return _c('div',{attrs:{"id":"app"}},[_c('p',{pre:true,attrs:{":title":"message"}},[_v("{{message}}")]),_v(""),_c('p',[_v(_s(message)])])}赤いマークがv-preコンパイルされたテンプレートです.p要素がリアルDOMノードにレンダリングされると、Vue内部のattrsモジュールのupdateAttrsメソッドがトリガーされて初期化され、v-bindコマンドの後のフローと同じように、最後にオリジナルのDOM関数setAttributeを呼び出して特性を設定します
Document
{{message}}
{{message}}
Vue.config.productionTip=false;
Vue.config.devtools=false;
var app = new Vue({
el:'#app',
data:{message:"Hello World"}
})
コンパイルの結果は次のとおりです.
対応するHTMLノードツリーは次のとおりです.
title属性も特性として処理する、コンソールにappを入力する.message="Hello Vue!"レンダリングの変化を見てみましょう.
v-pre対応のDOMノードでは、データが変化してもレンダリングがトリガーされないことがわかります.
ソース分析
テンプレートの解析中にラベルの開始に遭遇するとstart関数が実行され、{{message}}に対して
start:function start(tag,attrs,unary){//9136行目ラベル開始時にここまで解析
/* */
if (!inVPre) { // inVPre false inVPre , v-pre , 123
span v-pre
processPre(element); // v-pre
if (element.pre) { // element v-pre
inVPre = true; // inVPre true
}
}
if (platformIsPreTag(element.tag)) {
inPre = true;
}
if (inVPre) { // pre
processRawAttrs(element); // inPre true
} else if (!element.processed) {
// structural directives
processFor(element); // v-pre , , Vue
processIf(element);
processOnce(element);
// element-scope stuff
processElement(element, options);
}
/* */
},
ProcessRawAttrsプロパティをASTオブジェクトのattrsプロパティに保存するには、次のようにします.
function processRawAttrs(//9317行目v-preプロパティが設定されている場合はvar l=el.attrsList.length;if(l){
var attrs = el.attrs = new Array(l);
for (var i = 0; i < l; i++) { // , e.attrs
attrs[i] = {
name: el.attrsList[i].name,
value: JSON.stringify(el.attrsList[i].value)
};
}
} else if (!el.pre) {
// non root node in pre blocks with no attributes
el.plain = true;
}}後でgendata()関数の実行時にattr属性にまとめられ、最後にrenderが対応するDOMノードにレンダリングされるとそのattr属性が対応するノードに保存され、例のテンプレートがrender関数にレンダリングされるのは以下の通りです.
with(this){return _c('div',{attrs:{"id":"app"}},[_c('p',{pre:true,attrs:{":title":"message"}},[_v("{{message}}")]),_v(""),_c('p',[_v(_s(message)])])}赤いマークがv-preコンパイルされたテンプレートです.p要素がリアルDOMノードにレンダリングされると、Vue内部のattrsモジュールのupdateAttrsメソッドがトリガーされて初期化され、v-bindコマンドの後のフローと同じように、最後にオリジナルのDOM関数setAttributeを呼び出して特性を設定します