1: webpackをビルドするwebpack 構成をビルドするだけです。新しいフォルダーを作成して初期化します。次に、webpack の設定ファイルである新しい webpack.config.js ファイルを作成します。いくつかの簡単な依存関係をインストールします。 npm で webpack をインストールします。webpack-cli webpack-dev-server -D エクスポート ファイルとエントリ ファイルと同じディレクトリに public/index.html ファイルと src/index.js ファイルを作成します。 webpack.config.js ファイルで webpack を構成するだけです。 定数パス = require('path'); HtmlWebpackPlugin は 'html-webpack-plugin' を必要とします。 モジュール.エクスポート = { エントリ: './src/index.js', 出力: { ファイル名: 'bundle.js', パス: path.resolve(__dirname, 'dist') }, 解決する: { モジュール: path.resolve(__dirname, '')、path.resolve(__dirname, 'node_modules') ] }, プラグイン: [ 新しいHtmlWebpackプラグイン({ テンプレート: path.resolve(__dirname, 'public/index.html') }) ] } さて、webpack を設定したら、トピックを開始できます。 2. データハイジャックv2 では、vue は new Vue(el, options) を通じてインスタンス化されます。新しい vue ファイルを作成し、データハイジャック方法を vue に統合する必要があります。 データハイジャックのエントリファイルとして新しい vue/index.js を作成します。 './init.js' から {initState} をインポートします。 関数 Vue (オプション) { this._init(options); // データの初期化} Vue.prototype._init = 関数 (オプション) { var vm = options; // インスタンスを保存 vm.$options = options; // インスタンスをマウント initState(vm); // インスタンスの初期化 } インスタンスを初期化するための新しい init.js ファイルを作成します。 初期化中にいくつかの問題に注意してください。 1. 計算、監視、データは別々に処理する必要があります。 2. ユーザー定義データを直接変更しないでください。 3. データを関数として正式に指定するのは、コンポーネントが独自のスコープを持ち、汚染されないことを保証するためです。データ関数への直接アクセスは不可能であり、自動実行が必要です。データはオブジェクトになることもできる(この状況を考慮する必要がある) 4. このデータ取得方法は vm._data.xxx 経由ですが、Vue ではデータの取得にデータは必要ないため、ここでデータをインターセプトして書き換える必要があります。 5. 内部参照型は再帰を必要とする 関数 initState (vm) { var options = vm.$options; // オプションを取得 if (オプション.データ) { initData(vm); // ここで computed と watch を初期化する必要があるため、データを初期化します}; 関数 initData (vm) { var data = vm.$options.data; // データを再割り当てします。ユーザー定義のデータは変更しません。 data = vm._data = typeof data === 'function' ? data.call(vm) : data || {}; for (var key in data) { proxyData(vm, '_data', key); // データの値を再割り当てします}; observe(vm._data); //内部データを観察する} プロキシ レイヤーとして新しい proxy.js を作成します。 関数 proxyData(vm, ターゲット, キー) { Object.defineProperty(vm, キー, { 得る () { // インターセプションはここで行われます: vm.xxx => vm._data.xxx vm[ターゲット][キー]を返します。 }, set(新しい値) { // vm.xxx = yyy ===> vm._data.title = yyy vm[ターゲット][キー] = 新しい値; } }) } デフォルトの proxyData をエクスポートします。 アクセスの問題が解決されたので、データの内部要素を再帰する必要があります。 (vm._data) を監視します。 新しい observe.js を作成します。 関数 observe(データ) { if (typeof data !== 'object' || data = null) return; return new Observer(data); // アプリケーション型の場合は、オブザーバーを直接追加します} 新しいオブザーバーを作成する: observer.js 関数 Observer(データ) { Array.isArray(データ)の場合{ // 配列データを処理します。_proto_ = arrMethods; } それ以外 { //オブジェクトを処理 this.walks(data); } } Observer.prototype.walks = 関数 (データ) { let keys = Object.keys(data); // data の下のすべてのキーを取得します。これは依然として配列です。 for (var i = 0 ; i < keys.length ; i++) { var キー = keys[i]; var 値 = データ[キー]; defineReactiveData(data, key, value); // それぞれレスポンシブデータを再生成します }} オブジェクトやその他のレスポンシブな処理のために新しいreactive.jsを作成する 関数defineReactiveData(データ、キー、値){ observe(value); // 次に子要素に再帰的に適用します。 Object.defineProperty(データ、キー、{ 得る() { 戻り値; }, (新しい値) を設定する { (newValue === value) の場合、戻り値: value = newValue; // 変更をトリガーする } } ) }; さて、オブジェクトデータのハイジャックはここで処理され、残りは配列を処理する必要があります V2では、プロトタイプ上の7つのメソッドが書き換えられ、データハイジャックが実現されています。 ハイジャック配列: 新しい Array.js ファイルを作成します。 './config.js' から {ARR_METHODS} をインポートします。 // 7 つの配列メソッドのコレクション import observeArr from './observeArr.js'; var originArrMethods = Array.prototype, arrMethods = Object.create(originArrMethods); ARR_METHODS.map(関数(m) { arrMethods[m] = 関数(){ var args = Array.prototype.slice.call(arguments); // クラス配列を配列に変換 var rt = originArrMethods[m].apply(this, args); var newArr; スイッチ(m){ ケース 'プッシュ': 'ushift'の場合: 新しい引数 = 引数; ケース 'スプライス': newArr = args.slice(2); 壊す; デフォルト: 壊す; }; 新しいArrと観察Arr(新しいArr); rt を返します。 } }); エクスポート { arrMethods } observeArr(newArr): 配列はネストされる可能性もあるため、データを監視する必要があります。 「./observe」から observe をインポートします。 関数 observeArr (arr) { (var i = 0 ; i < arr.length ; i++) の場合 { observe(arr[i]); // 観察に戻ります。 } } デフォルトの observeArr をエクスポートします。 3: まとめ基本的なプロセスは次のようになりますが、object.defineProperty でデータを取得して設定するだけという単純なものではありません。主なプロセスを要約します。 (1):初期化中:インスタンスを保存し、インスタンスをマウントします。データは initState メソッドを通じて初期化されます。ここでは主にデータですが、処理が必要な計算値や監視値もあります。 (2): initData()を呼び出し、データを再割り当てしてからデータを実行し、ユーザーのデータ属性の取得方法をthis.xxxに変更してobserve(data)を実行します。 (3): 観察(データ)の際には、データを判断する必要があります。参照型の場合は、オブザーバーを追加する必要があります。同時に、オブザーバーはデータが配列かオブジェクトかを判断します。オブジェクトは直接object.definePropertyを再トリガーし、内部部分を再観察します。配列の場合は、7つの配列メソッドを直接使用し、配列の内部を観察し続けます。 上記は手書きのVue2.0データハイジャックの例の詳細です。手書きのVueデータハイジャックの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Linuxでブーストライブラリをインストールするための完全な手順
>>: mysql 5.7.18 winx64 無料インストール設定方法
XML/HTML コードコンテンツをクリップボードにコピー<!DOCTYPE html PUB...
何?何のスターコートですか?さて、もっとわかりやすくするために写真を見てみましょう。 よく見ると、パ...
序文最近、Tomcat の起動プロセスを分析していました。Tomcat のソース コードはアイデア次...
目次テーブルを作成するときにNOT NULL制約を設定するテーブルを変更するときに非NULL制約を追...
まず、公式サイト https://dev.mysql.com/downloads/mysql/5.7...
目次1. Dockerをビルドする2. コンテナに入る3. 設定ファイルを変更する4. Kafkaを...
注意: 他のマシン (IP) は、承認なしではクライアント経由で MySQL データベースに接続でき...
公式ドキュメント: JSON 関数名前説明JSON_APPEND() JSONドキュメントにデータを...
1. まず、公式ウェブサイト https://www.python.org/downloads/so...
1. WEBを理解するWeb ページは主にテキスト、画像、ハイパーリンクなどの要素で構成されていま...
Linux システムには 2 種類のスケジュールされたタスクがあります。1 つは 1 回だけ実行され...
この記事では、例を使用して、MySQL 累積集計の原理と使用方法を説明します。ご参考までに、詳細は以...
目次序文1. 一度限りの計画タスクの紹介2. コマンド3. 1回限りのスケジュールタスクを作成する4...
01PARTCoreWebApiチュートリアルローカルデモ環境Visual Studio2019--...
スクリプトの要件: MySQL データベースを毎日バックアップし、スクリプトを 7 日間保存します。...