目次
1. mvvm には少なくともコンテンツ
2. 私の実装
1. 変数の定義と watch の実装
2.命令の定義
3. vModel の生成
4. dom を vNode に解析する
5. 最初の初期化
6. 解析されたドム
ホームページ ウェブフロントエンド jsチュートリアル vv ソースコードを一緒に学び理解する

vv ソースコードを一緒に学び理解する

Jun 26, 2017 am 09:50 AM
ソースコード 理解する

vue の公式 Web サイトによると、vue は mvvm フレームワークであり、レスポンシブであることがわかります。その意味をより深く理解するために、簡単な mvvm 学習デモを実装しました。以下の皆さんと共有し、一緒に議論してください。

1. mvvm には少なくともコンテンツ

  1. 命令セット (テキスト、モデルなど) が含まれています。

  2. データ モデル、ビューと対話するデータ

  3. コンポーネントのサポート: つまり、 HTML コードの一部の動的更新

2. 私の実装

1. 変数の定義と watch の実装

var directives = {}; //指令集合var vNodes = new Array(); //解析的Dom集合var dataModel = {
    name:"name",
    title: "title"}; //数据Modelvar Watch = {
    isInit: false,
    watchs: new Array(),
    run: function(newValue, expOrfn){ var self = this;if(!self.isInit){
            expOrfn.call(vModel);
        }this.watchs.map(function(data,index){
            data.nodes.map(function(d,i){if(self.isInit){
                    d.directive.init(newValue, d, data); //绑定初始化值, 以及初始化一些事件}else{
                    d.directive.update(newValue, d, data); //只更新值,此时run的调用来值value-set                }
            });
        });
        
        self.watchs = [];
    },
    push:function(watch){this.watchs.push(watch);
    }
} //任务管理
ログイン後にコピー

説明:

  1. Watch の Push メソッドは依存関係を追加するために使用されます。依存関係を実行するには、実行が完了した後、現在の依存関係コレクションをクリーンアップする必要があります。 vueでの依存関係の収集はdepで完結し、watchでタスク管理を提供します(正しく理解できているかわかりません)

2.命令の定義

directives.text = { 
    init: function(value, vNode){
        vNode.elm.textContent = value;
    },
    update: function(value, vNode){
        vNode.elm.textContent = value;
    }
}//需要响应事件的怎么办directives.model ={ 
    init: function(value, vNode, _watch){
        vNode.elm.value = value; //判断自己发生的改变,不应该再改变自己 vNode.elm.addEventListener('keyup',function(evt){
            vNode.model[_watch.key] = vNode.elm.value;
        }); 
    },
    update:function(){

    }   
}
ログイン後にコピー

手順:

  1. デモの学習例なので、textとmodelの2つの簡単な仕様だけを定義しています。 text:はデータの表示に使用され、modelは入力(入力ボックス)の応答に使用されます

3. vModel の生成

//转换vModel,暂支持一级var properties = Object.getOwnPropertyNames(dataModel);var vModel = {}, formSetting = false;for( var index in properties){ 
    (function refreshData(_index){var key = properties[_index];var property = Object.getOwnPropertyDescriptor(dataModel, key);var setter = property.set;var getter = property.get;var _val = property.value;var _getter = function(){var val = getter ? getter.call(vModel) : _val;//收集依赖,与watch要分开            Watch.push({
                key: key,
                nodes: vNodes.filter(function(data,index){return data.modelKey == key ? true : false;
                }),
                getter: _getter
            });return val;
        };
        Object.defineProperty(vModel, key, {
            configurable: true,
            enumerable: true,
            set: function(value){if(setter){
                    setter.call(vModel, value);
                } //处理依赖                Watch.run(value, _getter);//this.value = value;            },
            get: _getter

        })
    })(index);
}
ログイン後にコピー

説明:

  1. vModel は dataModel に基づいて生成されます。つまり、各属性の get メソッドと set メソッドがカスタマイズされており、es6 のプロキシを使用して実装することもできます (Are)そうです)。

  2. 属性を設定するとき、依存関係を収集するために最初に get メソッドが呼び出されます。コンビニエンス値を変更すると、影響を受けるすべてのコンテンツを変更できます。

4. dom を vNode に解析する

//解析vNodesvar app = document.getElementById('app');
app.childNodes.forEach(function(data,index){if(data.nodeType != 1) return;var hv = data.getAttribute('data-hv');var hvs = hv.split(',');
    hvs.forEach(function(item,row){var keyValue = item.split(':'); //vNode对象上一定要有model,这是方便vNode相应时候的找vModel        vNodes.push({
            directive: directives[keyValue[0]],
            modelKey: keyValue[1],
            model: vModel,
            elm: data
        });
    });
});
ログイン後にコピー

説明:

  1. これは dom 上の data-hv で指定された命令を収集するだけなので、vNode に解析されるというのは突飛です。 、要素、vModel などはオブジェクトを形成し、vModel の各属性の get メソッドが依存関係を収集するときに参照するために vNode に保存されます。

5. 最初の初期化

//调用所有的get一次Watch.isInit = true;var _keys = Object.getOwnPropertyNames(vModel);
_keys.map(function(key,data){var data = vModel[key];
    Watch.run(data); 
});
Watch.isInit = false;
ログイン後にコピー

手順:

  1. ここでは、各 get がアクティブに実行され、その後 watch.run メソッドが実行されます。

  2. ここでの設計と実装は、vue の考えと一致していないように感じます。もしこれを見た人がいたら、アドバイスと指導をお願いします。

6. 解析されたドム

rreee

以上がvv ソースコードを一緒に学び理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ソフトウェアソースコード保護におけるPythonの応用実践 ソフトウェアソースコード保護におけるPythonの応用実践 Jun 29, 2023 am 11:20 AM

Python 言語は高級プログラミング言語として、学習が容易で読み書きも容易であり、ソフトウェア開発の分野で広く使用されています。ただし、Python のオープン ソースの性質により、ソース コードには他の人が簡単にアクセスできるため、ソフトウェアのソース コードの保護にいくつかの課題が生じます。したがって、実際のアプリケーションでは、Python ソース コードを保護し、そのセキュリティを確保するために何らかの方法を講じる必要があることがよくあります。ソフトウェア ソース コードの保護では、Python のさまざまなアプリケーション プラクティスから選択できます。以下は一般的なものです

PHPコードのソースコードを解釈・実行せずにブラウザに表示するにはどうすればよいでしょうか? PHPコードのソースコードを解釈・実行せずにブラウザに表示するにはどうすればよいでしょうか? Mar 11, 2024 am 10:54 AM

PHPコードのソースコードを解釈・実行せずにブラウザ上に表示するにはどうすればよいでしょうか? PHP は、動的 Web ページの開発に一般的に使用されるサーバー側スクリプト言語です。サーバー上で PHP ファイルが要求されると、サーバーはそのファイル内の PHP コードを解釈して実行し、最終的な HTML コンテンツを表示のためにブラウザーに送信します。ただし、PHP ファイルのソース コードを実行するのではなく、ブラウザーに直接表示したい場合があります。この記事では、PHPコードのソースコードを解釈・実行せずにブラウザ上に表示する方法を紹介します。 PHPでは、次のように使用できます

ソースコードをオンラインで閲覧できる Web サイト ソースコードをオンラインで閲覧できる Web サイト Jan 10, 2024 pm 03:31 PM

ブラウザの開発者ツールを使用して、Web サイトのソース コードを表示できます。Google Chrome ブラウザの場合: 1. Chrome ブラウザを開き、ソース コードを表示する Web サイトにアクセスします。2. Web 上の任意の場所を右クリックします。ページに移動して「検査」を選択するか、ショートカット キー Ctrl + Shift + I を押して開発者ツールを開きます; 3. 開発者ツールの上部メニュー バーで、「要素」タブを選択します; 4. HTML と CSS コードを確認するだけですウェブサイトの。

Golang フレームワークのソース コードを学習して適用するための包括的なガイド Golang フレームワークのソース コードを学習して適用するための包括的なガイド Jun 01, 2024 pm 10:31 PM

Golang フレームワークのソース コードを理解することで、開発者は言語の本質を習得し、フレームワークの機能を拡張できます。まず、ソース コードを入手して、そのディレクトリ構造を理解します。次に、コードを読み、実行フローをトレースし、依存関係を理解し​​ます。実際の例では、この知識を適用する方法、つまりカスタム ミドルウェアの作成とルーティング システムの拡張方法を示します。ベスト プラクティスには、段階的に学習すること、無意識のコピー&ペーストを避けること、ツールを利用すること、オンライン リソースを参照することが含まれます。

vueでソースコードを表示できるのでしょうか? vueでソースコードを表示できるのでしょうか? Jan 05, 2023 pm 03:17 PM

Vue ではソースコードを表示できます Vue でソースコードを表示する方法は、 1. 「git clone https://github.com/vuejs/vue.git」で Vue を入手する; 2. 「npm i」で依存関係をインストールする; 3. 「 npm i -g rollup」を使用してロールアップをインストールします; 4. 開発スクリプトを変更します; 5. ソース コードをデバッグします。

idea で Tomcat のソースコードを表示する方法 idea で Tomcat のソースコードを表示する方法 Jan 25, 2024 pm 02:01 PM

IDEA で Tomcat ソース コードを表示する手順: 1. Tomcat ソース コードをダウンロードする; 2. Tomcat ソース コードを IDEA にインポートする; 3. Tomcat ソース コードを表示する; 4. Tomcat の動作原理を理解する; 5. 注意事項; 6. 継続的な学習と更新する; 7. ツールとプラグインを使用する; 8. コミュニティに参加して貢献する。詳細な紹介: 1. Tomcat ソース コードをダウンロードします。ソース コード パッケージは、Apache Tomcat の公式 Web サイトからダウンロードできます。通常、これらのソース コード パッケージは ZIP または TAR 形式などです。

Golang フレームワークのソース コード分析と最適化 Golang フレームワークのソース コード分析と最適化 Jun 02, 2024 pm 04:54 PM

この記事では、Go フレームワークのソース コード分析と最適化について説明します。ソース コード構造には、コア フレームワーク ロジック、リクエスト コンテキスト、データ バインディング、レスポンス レンダリングを含む 4 つの主要なパッケージが含まれています。最適化手法には次のようなものがあります。 1. ルーティング ツリーを使用してルート処理を最適化し、ルート検索速度を大幅に向上させます。 2. キャッシュと圧縮にミドルウェアを使用して、サーバーの負荷と応答時間を削減します。 3. 高い応答性を維持するために、コールバックで時間のかかる操作を実行しないようにします。 4. ロギングを有効にして遅いリクエストを分析し、パフォーマンスのボトルネックを特定します。 5. 最新のパフォーマンス向上を活用するために、フレームワークのバージョンを定期的に更新します。

PHP ソース コード エラー: インデックス エラーの問題を解決する PHP ソース コード エラー: インデックス エラーの問題を解決する Mar 10, 2024 am 11:12 AM

PHP ソース コード エラー: インデックス エラーの問題を解決するには、特定のコード サンプルが必要ですインターネットの急速な発展に伴い、開発者は Web サイトやアプリケーションを作成するときにさまざまな問題に遭遇することがよくあります。中でも PHP は人気のあるサーバーサイド スクリプト言語であり、そのソース コード エラーは開発者がよく遭遇する問題の 1 つです。 Web サイトのインデックス ページを開こうとすると、「InternalServerError」、「Unde」などのさまざまなエラー メッセージが表示されることがあります。

See all articles