MVVMの理解とアプリケーションのフロントエンドフレームとVUE

より積極的なオープンソースの一部が更新にトレースがMVVMを使用し始めたあなたが見ることができるようにフロントエンドフレームた市場フレームワークは、内部のオープンソースプログラムの多くのMVVMのほとんどの前に、所定の位置にVUEの枠組みの後ろに徐々になっていますモードは、3.0後MVVMパターンを使用して、オープンソースモールDSMall3.0電話の終了前に似た後者の更新フレームワークVUEは、VUEの枠組みに置き換えられます、とMVVMとVUEは、それがどのような違いを生むだろうということ?
まず、MVVMの理解のために?
 
MVVMはモデル-ビュー- ViewModelに頭字語です。
モデルデータもモデルでのビジネスロジックの操作を定義して変更することができ、データモデルを表しています。
UIにデータモデルを担当してUIコンポーネントの表示代行は、展開しました。
ビューとViewModelにモニター・モデル・データ、ユーザインタラクション処理の制御動作を変更し、同期目的は、簡単に理解し、モデルビューが接続され、モデルビューです。
ビューとモデルなしの直接リンクとの間に、MVVMアーキテクチャではなく、ViewModelに介して相互作用。
モデルとViewModelの間の相互作用が双方向であるので、モデルに同期される表示データの変更、データも表示するモデルの即時反応を変化させます。
ViewModel層とモデル-ビューをデータバインディングがアップ接続されており、ビューとモデルの間で同期が完全に自動、人間の介入なしところで。
開発者はビジネスロジックに集中できるよう、マニュアル操作DOMを必要としない、データの同期が懸念州、統一された管理に状態MVVMによって完全に維持され、複雑なデータである必要はありません。
二つは、Vueのライフサイクルの
 
観測とデータ初期化イベントで(作成前)beforeCreateはまだ始まっていません。
(作成した後に)作成した操作は、観測データ、プロパティ、メソッド、初期化イベントを終了し、$エルプロパティが示されていません。
beforeMountは、(事前にロードされた)、マウントを開始する前に呼び出される初めて呼び出される関数をレンダリング関連しています。
テンプレートをコンパイルし、HTMLを生成し、データ内のテンプレートデータ:コンフィギュレーション次の例完成。この時点でhtmlページをマウントしていないことに注意してください。
(ロード後)マウント。$エルは、新しく作成されたVMエルを交換して、インスタンスの後に呼び出すことがマウント。
例としては、コンフィギュレーション、次の完了:上記のコンパイルされたHTMLがel DOMオブジェクト属性ポイントを置き換えます。HTML htmlページをレンダリングするテンプレートを完了しました。このプロセスは、AJAXの対話を実施しています。
データ更新呼び出しの前に(更新前)のBeforeUpdateは、パッチを適用する前に仮想再レンダリングとDOMで行われます。さらにフックの状態を変更することができ、重量が追加のレンダリング処理をトリガしません。
更新(更新)仮想レンダリングと再パッチ適用に起因するDOMデータ変更後に呼ばれます。
あなたが呼び出すと、DOMのコンポーネントが更新されているので、あなたは、DOM操作を実行するために頼ることができます。しかし、ほとんどの場合、あなたはこれが無限ループの更新をもたらすことができるように、この期間中の状態を変更することは避けるべきです。フックは、サーバー側のレンダリング中に呼び出されていません。
beforeDestroy破壊されたインスタンスの前に呼び出される(破壊前)。まだ完全に利用できるの例。
インスタンスが破棄された後に呼び出される(後で破壊)破壊。
呼び出しの後、すべてのイベントリスナーが削除され、すべての子インスタンスが破棄されます。フックは、サーバー側のレンダリング中に呼び出されていません。
1.ライフサイクルVUEとは何ですか?
:破壊の創造からVueのインスタンスプロセスは、ライフサイクルです。
創造の初め、初期化データ、コンパイル済みのテンプレート、マウントドム→レンダリング、レンダリングの更新→破壊とプロセスのシリーズから、Vueのライフサイクルと呼ばれます。
ライフサイクルがある2.vue役割は何ですか?
:私たちは、プロセス全体のVueインスタンスの制御に優れたロジックを形成することは、複数のイベントフックのライフサイクルだ、それが容易になります。
3.vueトータルライフサイクルのステージ?
:それは、8段階の合計に分けることができる:破壊後/前に破壊後/前の更新後/ローディング前/後を作成する前に。
4.いくつかのフックをトリガーする最初のページのロード?
:次のように作成し、これらのbeforeCreateをトリガーする、beforeMountは、搭載されています。
5.DOMレンダリングは、その期間内に完了していますか?
:DOMのレンダリングが完了しているに取り付けられました。
三つは、Vueのは、結合、双方向のデータの原則を実装:Object.defineProperty()
出版社をハイジャックと一緒にデータの使用を-道の加入者モデル:VUEを主に結合双方向のデータを実装します。
Object.defineProperty(で各属性をハイジャックするセッター)、ゲッターは、データの変更は、リスナーコールバックをトリガしたときに、加入者にメッセージを投稿しました。
通常のVueのJavascriptのオブジェクトは、そのインスタンスデータオプションとして渡された場合。
Vueがゲッター/セッターにObject.defineProperty彼らと、そのプロパティを横断します。
プロパティの変更の通知をするときにアクセスして変更され、ユーザーはゲッター/セッターを見ませんが、内部的には、Vueの依存追跡してみましょう。
VUEデータバインディングをMVVMへの入り口として結合双方向のデータ、統合オブザーバー、コンパイルし、3ウォッチャー。
データは、(VUEは{{}}解決するために使用されている)をコンパイルを介してコマンドを解析するオブザーバ、テンプレートコンパイラによってそれらのモデルの変化を監視します。
;>表示の更新-オブザーバとコンパイル、データ変更を達成するとの間のブリッジとしての最終用途ウォッチャー作用
インタラクティブ変更を表示(入力) - >データモデルチェンジ双方向結合効果。
JS結合シンプルな2ウェイ達成
<身体>
    の<div上記のid =「アプリケーション」>
    <種類のINPUT =「テキスト」上記のid =「TXTは」>
    <pは、上記のIDを述べ=「ショー」> </ p型>
</ div>
</ボディを>
<スクリプトタイプ= "テキスト/ JavaScriptを">
    VAR OBJ = {}
    Object.defineProperty(OBJ、 'TXT'、{
        GET:関数(){
            戻りOBJ
        }、
        SET:関数(newValueに){
            のdocument.getElementById(「TXT ').Valueの= newValueに
            のdocument.getElementById('


    document.addEventListener(「keyUpイベント」、関数(E){
        obj.txt = e.target.value
    })
</スクリプト>
ヴューアセンブリとの間の4つのパラメーター転送
1.親要素サブアセンブリ伝統的な価値の
子に渡す親コンポーネントコンポーネント:小道具法で認められたデータサブアセンブリと
サブアセンブリは、親コンポーネントを渡さ:$パラメータ渡しの方法発する
値によって非父と息子のコンポーネント間の2のデータ転送を、弟のコンポーネントを
eventBusは、次のことができ、トランジット駅と同等のイベントセンターを、作成することですイベントを渡し、イベントを受け取るためにそれを使用。
このプロジェクトは、より適切で、小さいです。(多くの人が、具体的な目的を達成するために、需要はやや技術が唯一の手段で確認するために、直接VUEXをお勧めはありますが...王である)
V.ルーティングVueの実現:ハッシュモードと歴史モード
 
ハッシュモード:ブラウザ内のシンボル" #」、#と#は後でwindow.location.hashを読んで、ハッシュ文字と呼ばれる;
機能:ハッシュ、URLであるが、しかし、HTTPリクエストに含まれていない、ブラウザがサーバの動作をガイドするために使用安全無用、ハッシュは、ページをリロードしません。
モードの歴史:;新しいHTML5の機能を使用して歴史
:pushState()、replaceState()ブラウザの履歴スタックを変更し、状態変化にpopStateイベントを聞くことができるとは、2つの新しいメソッドが用意されています。
第六に、Vueのと角度との違いが反応しますか?
 
(バージョンは常に更新され、次のような違いは、おそらくかなり右ではありません。私は、角度のために、唯一のVUEを使用して動作し、より少ない調理反応します)
1. AngularJSとの違い
同じポイント:
サポート命令:ビルトインコマンドやカスタム命令、フィルタをサポートしています。内蔵のフィルタとカスタムフィルタを、結合双方向データをサポートし、ローエンドのブラウザをサポートしていません。
異なる点:
な増加依存性の注入特性として、学習、およびAPI自体は比較的シンプルで直感的Vue.js提供し、高コストAngularJS;
パフォーマンスで、データへの依存が汚れAngularJSの検査をするために、より多くのように遅くウォッチャーを、
Vueの.jsベースの追跡観察および非同期キューの更新を使用する依存し、すべてのデータは、トリガーとは無関係です。
2.との差に反応
同じ点:
特別なJSX文法と反応し、Vue.jsコンポーネント開発も調製に尊重されます。
使用してコンパイルする必要があり、両方の後VUE特殊なファイル形式、ファイルの内容は、いくつかの契約を結んでいる。
同じ中心的な考えを:すべてのコンポーネントは、コンポーネントインスタンス間で入れ子にすることができ、
開発者がカスタマイズすることができます合理的なフック関数を提供します;需要に対処するための地上の
コアパッケージに列AJAX、ルートおよび他の機能を内蔵しないが、プラグ負荷、
特性の成分開発にミックスインをサポートします。
異なる点は:
仮想は、使用してDOMをレンダリングします結果が汚れ検査を行うリアクト;
Vue.jsはテンプレートの指示、フィルタなどを提供しては非常に簡単かつ迅速に仮想DOMを操作することができます。
七、VUEルーティングフック関数
 
ホームナビゲーションジャンプを制御することができ、beforeEach、afterEachは、一般的にページのタイトルを変更するために使用されています。
いくつかは、リダイレクトページを調整するにはログインする必要があります。
:beforeEach次に、から、3つのパラメータがあり
、ターゲットがルートオブジェクトのルートに入ろうとして、:まで
から:ルートは現在のナビゲーションルートを離れようとした
次の:関数は、このフックを解決メソッドを呼び出す必要があります。結果の実装は、次のメソッド呼び出しのパラメータに依存しています。あなたはジャンプページを制御することができます。
八は、何がそれをvuex?どのように使用するには?どのシナリオを使用するには?
 
唯一の店に焦点を当てた状態で読み込み、 
状態の変化が同期のものである変異を、提出する方法です。非同期ロジックはアクションにカプセル化されなければなりません。
ストアは、main.jsに注射を導入しました。ディレクトリストア、... ..エクスポートを作成します。
シーン:単一ページのアプリケーション、コンポーネント、音楽プレーヤー間の状態、ログインして、カートに入れる
状態
Vuex単一の状態の木、つまり、各アプリケーションは、店舗の唯一のインスタンスを含むが、うではない単一の状態ツリーとモジュラー競合。
データを直接変更することはできません格納されたデータの状態、。
突然変異
方法定義変異は、状態又はデータのVuex動的変更を保存します。
ゲッター
同様のコンピューティングVUE特性は、主にデータの一部をフィルタリングするために使用されます。
アクション 
アクションがデータを処理する方法で突然変異がデータ使用可能非同期となるプロセスとして理解することができる、非同期動作は、単純にそのデータを意味します。
ビュー層はstore.dispathでアクションを配布します。
CONST店舗=新しいVuex.Store({//ストア
      状態:{
         COUNT:0
             }、
      変異:{                
         INCREMENT(状態){
          state.count ++
         }
          }、
      アクション:{ 
         INCREMENT(コンテキスト){
          context.commit( 'INCREMENT')
   }
 }
})
モジュール
プロジェクト特に複雑な、彼らができ各モジュールは、自身の状態を持っているように、突然変異、アクション、ゲッター、構造が非常に明確かつ管理が容易になるように。
ModuleA = {CONST
  状態:{...}、
  変異:{...}、
  アクション:{...}、
  ゲッター:{...}
 }
CONST = {ModuleB
  状態:{...}、
  変異: ...} {、
  アクション:{...}
 }

新しい新しいVuex.Store =一定({保管
  モジュール:{
    A:ModuleA、
    B:ModuleB
})
9、VUE-CLIは、カスタムコマンドを追加するには?
1.ローカル命令作成
VARアプリ=新しい新しいヴュー({
    '#app':EL
    データ:{    
    }、
    //作成指示()は、複数であってもよい
    ディレクティブ:{
        //命令名の
        DIR1:{
            (EL挿入を){
                //最初のパラメータは、現在DOM使用されるコマンドの命令である
                ;にconsole.log(EL)
                はconsole.log(引数);
                // DOM操作
                el.style.width = '200pxの';
                el.style.height =「200pxの';
                el.style.background =' #000「;
            }
        }
    }
})
2.グローバル命令
Vue.directive( 'DIR2'、{
    挿入(EL){
        にconsole.log(EL);
    }
})
3.コマンド
<DIV ID = "アプリケーション">
    の<divのV-DIR1> </ div>
    <divのV-DIR2> </ div>
</ div>の
10、VUEフィルタをカスタマイズする方法?
HTMLコード:
<DIV ID = "アプリケーション">
     の<input type = "text" V-モデル= "MSG" />
     {{MSG |生かす}}
</ div>の
JSコード:
VAR VM =新しい新しいヴュー({
    EL: "#app"、
    データ:{
        MSG: ''
    }、
    フィルタ:{
      大文字:関数(値){
        (値!)を返した場合'

        value.charAtリターン(0).toUpperCase()value.slice +(1)
      }
    }
})
グローバルに定義されたフィルタ
Vue.filter( '大文字'、関数(値){
  IF(!値)戻り'
  値=値.toString()
  value.charAt(0).toUpperCase()value.slice +を返す(1)
})
フィルタは、最初のパラメータとして式(MSG)の値を受け取ります。
フィルタは、最初のパラメータとしてMSG値を大文字に受け取ることになります。
キープアライブのXI理解?
 
Vueがキープアライブの部品内蔵され、コンポーネントが保留に含まれ、または再レンダリングを回避することができます。
VUE 2.1.0バージョンの後に、キープアライブ2つの新しく追加された属性:含む(キャッシュコンポーネントを含む)および除外(アセンブリキャッシュを除外しない、優先度よりも大きいが挙げられます)。
使用
<=キープアライブ'include_componentsは' = 'exclude_components'除外するinclude>の
  <コンポーネント>
    <! -キャッシュは、コンポーネントのプロパティが含まれ、除外するかどうかに依存します- >
  <
</キープアライブ>
パラメータの
含める-文字列またはコンポーネント名のみにマッチする正規表現がキャッシュされる
除外-文字列や正規表現、名前に一致するすべてのコンポーネントがキャッシュされません
属性を含めると除外を許可コンポーネント条件付きでキャッシュ。
どちらも、文字列、正規表現、配列を分離するために「」することができます。
定期的または配列を使用する場合は、V-バインドを使用することを忘れないでください。
使用例
<! -カンマ区切り文字列だけ成分AおよびBがキャッシュされます。- >
<=ザキープアライブ"A、B">を含む
  <コンポーネント> </コンポーネント>
</キープアライブ>

<! -正規表現(マッチングルールがキャッシュされる満たし、V-バインドを使用する必要があります) - >
<キープアライブ:含ま= "/ A | B /">
  <コンポーネント> </コンポーネント>
</キープ-alive>

<! -アレイ(含まれていますがキャッシュされ、V-バインドを使用する必要があります) - >
<キープアライブ:含ま= "[ 'A'、 'B']">
  <コンポーネント> </コンポーネント>
</キープアライブ>
XII単語インタビューの質問には答えることができる
 
唯一の電流成分仕事1.css
:文体スコープのタグにすることができる。例えば:<スタイル>は</スタイル>スコープ
2.v-IFおよびVショーの違い
:条件は、V-ショーに応じて描画されるV-場合、ブロック又はなしの表示であり、
差分3 $経路と$ルータの
回答:$ルートパスを含む「オブジェクトのルーティング情報は、」paramsは、であり、ハッシュ、クエリ、をフルパス、マッチした、名前やその他のルーティング情報のパラメータ。
ルータやオブジェクトの$「ルーティングインスタンスは、」ルーティングジャンプ方法、などのフック機能を備えています。
2つのコア4.vue.jsは何されていますか?
:システムのデータ駆動型のコンポーネント
一般的に使用されるいくつかの5.vueコマンド
:V-ため、V-IF、バインド-V、V-ON、V-ショー、V-他
6.vue一般的に使用される修飾子?
:.prevent:ページをリロードしない場合、
.stop:バブリングクリックイベントを止める;
.self:イベントではなく、それ自体が、トリガ要素内のサブ要素よりも、発生した場合、
.capture。

A:
キー値の8.vueの役割?
:Vue.jsはと更新されたリスト要素であるV-のためにレンダリングされている場合は、その戦略「その場の多重化で」使用してデフォルト。
データ項目の順序が変更された場合は、VueのDOM要素は、データ項目の順序に一致するように移動し、単にここでは、各要素を再利用し、各要素は、特定のインデックスでレンダリングされていることを確認するように見えることはありません。
主な役割は、効率的な更新仮想DOMへの鍵です。
9.プロパティVUEの計算とは何ですか?
:テンプレートテンプレートにあまりにも多くのロジックを置くことは維持するために重すぎると難しいだろう、データ処理複合体の必要性、および潜在的に複数のユースケースでは、プロパティとして計算を取るようにしてみてください。
利点:①明確なデータ処理構造こと;
②自動更新処理の結果、データの更新、データに依存して、
③この点VMインスタンス内の計算された属性、
呼び出されたとき、直接属性の名前を書くことができる④テンプレートが計算される。
⑤ゲッターが使用されていますまた、データを変更するために設定された方法を使用することができ、データの取得方法、
⑥の方法に比べは関係なく、同じデータの従属変数の、方法は再計算が、キャッシュから計算同じデータ収集時間に依存しているであろう、再計算されません。
単一ページのアプリケーションの10.vue他の長所と短所
A:利点:Vueの目標は結合データとAPIによって可能な限り単純な結合応答アセンブリのビューを達成することで、システムのコアはデータバインディング応答です。
MVVM、データ駆動型、コンポーネント、軽量、シンプル、効率的、高速で、モジュールに優しいです。
短所は:ブラウザ、IE9への唯一の最小サポートの低いバージョンをサポートしていません;
; SEOの最適化を助長されていません(SEOサポートしたい場合は、サーバーコンポーネントによってレンダリングされることをお勧めします)
最初にロードされた家は、比較的長い時間がかかります。
あなたは、ブラウザのナビゲーションボタンが自分の前方と後方を実装する必要が使用することはできません。

おすすめ

転載: blog.51cto.com/13938514/2405781