Vueフレームワークエクスペリエンス-yi

以前にVUEフレームワークについて少し知っていました。ここでは、簡単に忘れて知らない知識をいくつか記録します

1.vueはプログレッシブjsフレームワークです

2.宣言データの表示に加えて、既存の変数をポイントすることもでき、デフォルトで双方向バインディングが確立されています。いずれかを変更すると、もう一方も変更されます。

  var myData = {a:1};

  var app = new Vue({

    the: '#app'、

    data:myData 

  });

  console.log(app .a)// 1

  //属性を変更します。元のデータも変更されます

  app .a = 2;

  console.log(myData .a)// 2

  //元のデータが変更され、属性値も変更されます 

    myData .a = 3;

  console.log(app .a)// 3

3.ライフサイクル

  大きく3つのカテゴリーに分かれています(公式サイトを中心に、公式サイトとは若干異なる場合があります):

    create:インスタンスの作成後に呼び出され、データ検出はこの段階で完了しますが、マウントされていません。$ elはまだ利用できません。データを初期化する必要がある場合に役立ちます。

    マウント:インスタンスにマウントされた後に呼び出されます。通常、最初のビジネスロジックはここから始まります。

    beforeDestory:インスタンスが破棄される前に使用されます。主に、addListenerを使用してイベントをリッスンする一部をバンドル解除します。

4.v-pre {{}}タグを表示するときに使用します

5.フィルター-フィルター

  直列に接続でき、パラメータも受け入れることができます

    //タンデム

      {{メッセージ| fiter1 | filter2}}

    //パラメータを受け入れる

      {{メッセージ| er a、b)}}

6.計算された属性---計算済み

  6.1すべての計算された属性にはゲッター(読み取り属性)とセッター(設定属性)属性が含まれます

    計算された:{

      フルネーム:{

        get:function(){}

        set:function(newValue){}

      }

    }

  6.2計算された属性の依存関係キャッシュ(houseメソッドのメソッドとは異なる点):計算された属性が依存するデータが変更されると、彼は再評価します。テキストが変更されない限り、計算された属性は更新されません。

7.方法と計算の違い

  キャッシュに依存することに加えて、()を呼び出すときにメソッドmethodを追加する必要があり、計算は必要ありません。

8.オブジェクト構文または配列構文は、クラスをコンポーネントにバインドします

  <component:class = '{active:isActive}'> </ component>

  <component:class = '[{active:isActive}、errorclass]'> </ component>

9.基本的な手順(他の人は記録せず、自分の死角のみを記録する)

  v-clock:式は不要、display:noneと組み合わせて使用​​、1つの文を追加するだけ:[v-clock] {display:none}

      ページのフラッシュによるページ初期化の遅延の問題を解決することをお勧めします。これは単純なプロジェクトには実用的ですが、webpack、vue-routerなどのエンジニアリングプロジェクトがあります。プロジェクトのHTML構造には、空のdiv要素しかありません。残りの部分はコンテンツはすべて、さまざまなコンポーネントをマウントするルーティングによって行われるため、v-clockは必要ありません。

10. HTMLでテンプレートを使用できます:v-if、v-for、v-show(使用できません)

  <div id = "app>

    <template v-if = "index == 1">

      <p> </ p>

    </テンプレート>

  </ div>

11.フィルタリングとソート

  元の配列を変更したくない場合、配列のコピーを使用して表示をフィルター処理して並べ替える場合は、calculatedプロパティを使用して、フィルター処理され並べ替えられた配列を返すことができます。  

   <div id = "app>

     <ul>

        <template v-for = 'book in fiterbook'>

        <li>书名:{{book.name}} </ li>

      </テンプレート>

    </ ul>

  </ div>

  <スクリプト>

    var app = new Vue({

      el: "#app"、

      データ:{

        本:[{name: '"vue.js実際の戦闘"}}

      }、

      計算:{

        fitersbook:function(){

          this.books.fiter(function(books){を返す

            戻りbooks.name.match(/ javascript /)

          )}

        }

      }

    })

  </ script>

12. v-forレンダリングの場合、vueはすべての更新ではなく、更新が必要なもののみを更新し、パフォーマンスを向上させます

  ただし、例外があり、以下の変更された配列では、vueを検出できず、ビューの更新がトリガーされません。

         app.books [3] = {}など、アイテムをインデックスから直接設定します

      app.books.length = 0など、配列の長さを変更します

  解決する:

          最初の質問(2つの方法):

        (1)組み込みのsetメソッドを使用する

          a:Vue.set(app.books.3、{

              名前: '"Cssシークレット" "、

              著者Lea 'Lea Verou'

            })

           b。webpackでコンポーネント化されたメソッドを使用する場合、デフォルトでインポートされるvueはないため、$ setを使用できます

              this。$ set(app.books、3、{})(これは現在のVueインスタンスを指します)   

          c。非Webpackモードで$セットを使用することもできます。           

          解決するd.splice

            app.books.splice(3,1、{})

     2番目の質問:app.books.splice(1)     

13. vモデル修飾子

  (1)。レイジーは変更イベントで同期するように変更され、データはリアルタイムで変更されず、フォーカスが失われたとき、またはEnterキーを押したときにのみ更新されます

  (2)。トリム修飾子は、入力された最初のスペースを自動的にフィルタリングできます

14.コンポーネントの登録

  グローバルコンポーネント:このコンポーネントを親インスタンスで使用するには、インスタンスを作成する前にコンポーネントを登録する必要があります

    <div id = "app">

      <my-component> </ my-component>

    </ div>

    <スクリプト>

      Vue.component({

        テンプレート: '<div> haha​​hhahha </ div>'

      )}

      var app = new Vue({

        the: '#アプリ'

      })

    </ script>

15. vueコンポーネントテンプレートは、HTMLによって制限される場合があります。たとえば、<table>は、<tr>、<td>、<th>などのこれらのテーブル要素の使用のみを許可するため、<table>でコンポーネントを直接使用すると、無効です。解決策:special is属性を使用してコンポーネントをマウントする

  <div id = "app">

    <表>

      <tbody is = 'my-component> </ tbody>

    </ table>

  </ div>

        <スクリプト>

    Vue.component {'my-component'、{

      テンプレート: '<div> sffsfsgg </ div>'

    }

    var app = new Vue({

      the: '#アプリ' '

    })

  </ script>注:tbodyがレンダリングされると、コンポーネントのコンテンツで置き換えられます。一般的な制限要素は、<ul>、<ol>、<select>です。

16.スコープスロット

  スロットは、単一スロット、名前付きスロット、スコープスロットに分かれています。

    <div id = 'app'>

      <children-component>

        <template scope = 'props>

          <p>親コンポーネントのコンテンツ</ p>

          <p> {{props.msg}} </ p>

        <テンプレート>

      </ children-component>

    </ div> <script>

        Vue.component {'children-componenet、{

          テンプレート: `<div class = 'container'>

            <slot msg = ``サブコンポーネントのコンテンツ ''> </ slot>

          </ div> `

        }

        var app = new Vue({

            the: '#アプリ'

        )}

    </ script>     

  スロット要素には、コンポーネントにデータを渡すための同様の小道具があります。Msg= "子コンポーネントのコンテンツ"、データはスロットに渡されます。親コンポーネントはテンプレート要素を使用し、scop = 'props'機能がありますここで、propsは単なる一時変数です。-for= 'item in items'について考えてください。テンプレート内のアイテムは、テンプレートの一時変数propsを介してサブコンポーネントスロットからデータメッセージにアクセスできます。

17.名前付きスロットにアクセスできます。$ Slot.defaultから$ slotには、名前付きスロットに含まれていないすべてのノードが含まれます

18.コンポーネントの高度な使用法

  (1)。再帰的なコンポーネント

      コンポーネントに名前オプションが設定されている限り、コンポーネントは自分のテンプレートで再帰的に呼び出すことができます

        Vue.component({

          名前: '子コンポーネント'

          テンプレート: `<div class = 'child'>

                <子コンポーネント

                  :count = 'count + 1'

                  v-if = 'count <3'> </ child-component>

          </ div> `

        })

    (2)。インラインテンプレート

       コンポーネントを使用する場合は、コンポーネントラベルに「インラインテンプレート」機能を使用します。コンポーネントは、コンテンツの配布ではなく、コンテンツをテンプレートとして使用するため、テンプレートがより柔軟になります。

        <div id = 'app'>

          <子コンポーネントのインラインテンプレート>

            <div>

              <h2>親コンポーネントで子コンポーネントのテンプレートを定義する</ h2>

              <p> {{msg}} </ p> //親コンポーネントの変数

                 <p> {{message}} </ p> //サブコンポーネントの変数

            </ div>

          </ child-template>

        </ div>

        <スクリプト>

          Vue.component( 'child-component'、{

            data:function(){

              return(

                 msg: 'サブコンポーネントで宣言されたデータ'

              )

            }

          })

          var app = new Vue({

              the: '#app'、

              データ:{

                メッセージ:「親コンポーネントで宣言されたデータ」

              }

          })

        </ script>

      親コンポーネントで宣言されたデータメッセージと子コンポーネントで宣言されたデータメッセージの両方をレンダリングできます(同じ名前が使用されている場合、子コンポーネントのデータが推奨されます)が、これはインラインテンプレートの欠点です-スコープは理解しにくいです非常に特殊な使用シナリオでは、インラインテンプレートを簡単に使用しないことをお勧めします。

  (3)動的コンポーネント

      vue.jsは、Is機能を使用してマウントするコンポーネントを選択することで、さまざまなコンポーネントを動的にマウントするための特別な要素<component>を提供します

        <component is = 'template-one'> </ component>

  (4)。非同期コンポーネント

      パフォーマンスの問題。最初にすべてのコンポーネントをロードする必要はありません。さいわい、vue.jsでは、コンポーネントを動的に解析するファクトリ関数としてコンポーネントを定義できます。vue.jsは、コンポーネントをレンダリングする必要がある場合にのみファクトリー関数をトリガーし、後でレンダリングするために結果をキャッシュします。

        Vue.component({

          window.setTimeout(funtion(){

            resolve({

              テンプレート: '<div>非同期でレンダリング</ div>'

            )}

          }、2000)

        })

        var app = new Vue({el: '#app'})

19. $ nextTick

    リストを非同期に更新する

    質問:vueはDOMを更新しますが、DOMは引き続き作成されます。$ nextTickは、DOM更新が完了したときにガイドするために使用されます

    Vueは、データの変更を監視するときにDOMを直接更新しませんが、キューを開き、同じイベントループで発生するすべてのデータ変更をバッファーに入れます。不要な計算とDOM操作を回避するために、バッファリング中に重複データが削除されます。次に、次のイベントループティックで、vueはキューを更新し、実際の(重複排除された)作業を実行します。したがって、forループを使用してデータを100回動的に変更します。実際には、最後の変更のみが適用されます。そのようなメカニズムがない場合、DOMは100回再描画するため、オーバーヘッドが大きくなります。

      方法:{

        getText:function(){

          this.showDay = true;

          var text = document.getElementById( 'div')。innerHTML

        }

      }

     に:  

     方法:{

        getText:function(){

          this。$ nextTick(function(){

            this.showDay = true;

            var text = document.getElementById( 'div')。innerHTML

          }

        }

      }

20.X-テンプレート

  <div id = 'app'>

    <my-component> </ my-component>

    <script type = 'text X-Template' id = 'my-component'>

      <p>これはコンポーネントのコンテンツです</ p>

    </ script>

  </ div>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

           

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                                                                                                                                                                             

おすすめ

転載: www.cnblogs.com/xxny/p/12633858.html