テンプレート-vueテンプレートエンジンが解析されてどのように、どのように命令処理

テンプレートとは何ですか
< div要素のid = 'アプリ' > 
  < divの> 
    < 入力Vモデル= "タイトル" /> 
    < ボタンVオン:クリック= "追加" >提出する</ ボタン> 
  </ divの> 
  < UL > 
    < V-用=「リスト内の項目」>
      {{項目}}
    </ > 
  </ UL > 
</ DIV >

これはテンプレートで、テンプレートは、それは何ですか?

1は、文字列はちょうどHTMLのように、存在している、基本的に文字列です。
2、 ロジックがある 、などのような裁判官、これらのサイクルとして、V-場合V-用というように、それは論理的なものになるかどうか、何のロジックが書き込む前に存在しない、HTML
HTMLなどの形式の3、が、非常に異なります。最初の HTML構文V-場合、V-のためにこれらの中で認識されていません 第二は、全く論理HTML静的でない、 VUEは、動的論理です。彼らはただ形式のようなものです
4、しかし最終的にはまだ表示されるHTMLテンプレートを変換する必要があります。それでは、どのように彼はそれを行うのですか?



まず、最終的なテンプレートがあるため、jsのコードに変換する必要があります。
最初の論理テンプレート、V-場合は、V-のために、あります。JSを使用する(チューリング完全言語)を実装する必要があります
ページをレンダリングするために、HTMLへの2番目のテンプレートは、JSを使用するために実装する必要があります
したがって、テンプレートは、最終的に(つまり、レンダリング機能を機能をレンダリング)JS関数に変換すること

 

まず、と次を理解します
そこ OBJ = {
  名前: 'zhangsan' 
  年齢: 20 
  getAddress:関数(){
    警告( '北京' );
  }
}

// で行う
機能のFn(){
  警告(obj.name)。
  警告(obj.age)。
  obj.getAddress();
}
FN();

// 使用幅
関数(){FN1
  (OBJ){
    警告(名);
    警告(年齢);
    getAddress();
  }
}
FN1();

実際の開発では、一緒に使用しないようにしよう。FNは、私たちの通常の使用です。を使用したFN1。二つは、ラップで統一されたプロパティを、書いていないとの内部と同じ効果、です。読みやすさはそれほど強くないかもしれません。

 

我々はいくつかの単純なテンプレートを見ます
< DIV ID = "アプリケーション" > 
  < P > {{価格}} </ P > 
</ DIV >

このテンプレート関数は次のように最終的に生成されます

 

/ * *
* _C:ラベルDOMを作成します。
* _V:テキストノードを作成します。
* _s:のtoString
* / 
機能(){レンダリング
  この){ // この就是のVMの
    リターン_c(
       '<DIV>' 
      {
        ATTRS:{ "ID": "アプリケーション" }
      }、
      [
        _c( 'P' 、[_ V(_s(価格))])
      ]
    )
  }
}

これは、このは、このインスタンスのVMで、この_cは、ラベルを作成するために使用さvm._c、DOMです。最初のパラメータはdiv要素です。2番目のパラメータは属性を持つオブジェクトオブジェクト、です。第三のパラメータは、アレイは、アレイは、唯一つの要素、確かvm._cこの_cがあります。_C最初のパラメータがpであり、2番目のパラメータは、アレイ、_Vある配列、(_s(価格))であり、そこでは、価格は確かであるvm.priceだdata.priceあります。そして、それはvm._sある_sの前に、ToString関数です。_vまた、テキストノードを作成するために使用される、vm._v。

 

要約:
すべてのテンプレートの情報は、レンダリング機能に含まれています。
この即VM
this.price即vm.price即のdata.price即価格。
それthis._cすなわちvm._c _c



機能をレンダリング
私はレンダリング機能をどこで見ることができますか?
レンダリング機能のTODOリストのデモを見てください
<!DOCTYPE HTML > 
< HTML LANG = "EN" > 
< > 
  < メタ文字コード= "UTF-8" > 
  < メタ= "ビューポート" コンテンツ= "幅=装置幅、初期の規模= 1.0" > 
  < メタHTTP -equiv = "X-UA-互換性のある" コンテンツ= "IE =エッジ" > 
  < タイトル>ドキュメント</ タイトル> 
</ ヘッド> 
< 身体> 
  <!
  ID = "アプリ" > 
    < 入力Vモデル= 'タイトル' /> 
    < ボタンVオン:クリックする= '追加' >提出する</ ボタン> 
    < ulのV-用= 'アイテムのリストで' >
      {{項目}}
    </ UL > 
  </ DIV >
    
  <! - 源码- > 
  < スクリプトSRC = "./ VUE-2.6.10.js" > </ スクリプト> 
  < スクリプト> 
    のvar データ= {
      タイトル:'' 
      リスト:[]
    }
    // 初期化し、インスタンスVUEの
    VAR VM =  新しい新しいヴュー({
      上:' #app ' 
      日付:日付、
      方法:{
        追加:関数(){
          この.list.push(この.TITLE)。
          この.TITLE =  ''
        }
      }
    })
  </ スクリプト> 
</ ボディ> 
</ HTML >

 

そして、この例を、それをプリントアウトし、それがソースコード検索code.renderでどのようなものであったかの機能をレンダリングするVUEを見て
この){
  リターン _c( 'div要素' 
        {           ATTRS:{             
"ID": "アプリ"           }         }、         [           _c( '入力'
            {               ディレクティブ:[{
// タイトルの変更は、値は、入力に応じて、に割り当てられたとき                 名前:「モデル」                 rawName: "Vモデル"                 値:(タイトル)、                 表現:「タイトル」               }]、               domProps:{                 "値" :(タイトル)               }、               ON:{ // 内部のデータ入力の変更、イベントに耳を傾け、それがタイトルに割り当てられます                 「入力」:機能($イベント){                   IF($ event.target.composing)リターン                   タイトル = $ event.target.value                 }               }             })、             _v( "" )、             _c( 'ボタン'               {                 上:{                   「クリック」:追加                 }               }、               [_v( "提出" )]             )、             _v( "" )、             _L(               (リスト)、               関数(アイテム){                 戻り _C( 'UL'、[_v( "\ n" + _s(項目)+ "の\ n" )])               }             )         ]、 2       }

それはこのようなものです。これは、レンダリング機能に対応するデモです。第二引数の入力を作成する場合がありディレクティブ。コマンドと呼ばれ、コマンド名がモデルです。値はvm.titleあるタイトルです。vはテキストノードの作成を表し、主に入力し、ボタンを押してラップを持っている、いない場合はラップ_vの後ろに(「」)、_、空のテキストノードを作成するために、そこに_Vされるだろう。_Lは、Liを返されるリストのラベルの配列です。

 

 

おすすめ

転載: www.cnblogs.com/wzndkj/p/11070202.html