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 無料インストール設定方法
目次序文脱構築記号の役割使い方分割割り当ての適用アプリケーションの簡単な紹介JSONデータを抽出する...
(1)はじめに: clipboard.js は、テキストをクリップボードにコピーする機能を実装する軽...
目次ミックスインの実装フック関数のマージプロジェクト実践伸ばす要約するVue は mixins AP...
1. CSS3の三角形は特殊効果でズームし続けます11.1 画像プレビュー 11.2 index.h...
この記事の冒頭で、以前書いた入門記事の間違いを訂正したいと思います。初心者を再び誤解させないように、...
今日、mysql ポートを変更したいと思ったのですが、/etc/ ディレクトリに my.cnf ファ...
休憩中に、眠気を完全に吹き飛ばす電話がかかってきました。「開発者が更新 SQL を書くときに whe...
複雑な表を作成するには HTML を使用します。複雑なテーブルでは通常、td の rowspan 属...
MySQL では、データベースはデータ ディレクトリ内のディレクトリに対応します。データベース内の各...
目次MySQLがmy.cnfを読み込む順序1. mysql.server の起動方法2. mysql...
まず、状態マネージャーとは何か、そしてそれが何をするのかを知る必要があります。複数のページで同じプロ...
知らせ! ! !この状況は、実際には仮想マシンのインストール中に回避できます。次回仮想マシンをテスト...
目次まず結論から質問解決Promiseを使用してコールバック関数をカプセル化する要約するまず結論から...
mysqlはデータディレクトリ内のファイルをコピーしてデータを復元します背景: MySQL がクラッ...
この記事では、主に、div の水平レイアウトの両側の配置を実装する 3 つの方法を紹介し、それらを共...