1.基本命令:
- V-ショー
- V-IF
- V-ELSE
- V-用
- V-バインドジェーン(:) VUEセッターゲッターメソッドが価値の変化を監視するために、プロセス・インスタンスに追加されます
- ジェーンをV-クリック(@)
モニターウィンドウイベントを2.vue:
おかげ smallW
ウィンドウの変化に応じてキャンバスの幅を変更するには?
ソリューションの1つの非常に共通:
- 記録幅属性データの初期化時間の定義
データ:{ screenWidth:// document.body.clientWidthここでデフォルト値を与えることである(これは非常に重要です) }
- VUEは、ローディングフック関数リサイズ方法の内側に取り付けられました
()搭載{ =一定この window.onresize =()=> { リターン(()=> { window.screenWidth = document.body.clientWidth that.screenWidth = window.screenWidth })() } }
- のサイズを変更すると、変更を監視
見る:{ screenWidth(ヴァル){ 場合(!this.timer){ this.screenWidth = valの this.timer =真 この= LET たsetTimeout(関数(){ 。that.screenWidth =その$ store.state.canvasWidthの コンソールを。ログ(that.screenWidth) that.init() that.timer = FALSE }、400) } } }
対処方法2:
モニターを搭載した場合(速いが、一般のカップルが最初に選ぶだろう)
いくつかの言うことの3.vueソース:
- ライフサイクル
- VUEは何をするための新しい何かありますか?
- 新しい新しいオブジェクト
- メンバーオブジェクトのコンストラクタのプロトタイプに、この新しいオブジェクトポイントのプロトタイプ
- このコンストラクタは、新しいオブジェクトを指します
- 新しいオブジェクトを返します。
拡張:新新しいオブジェクト、最後に何をしましたか?(インタビューの質問)
- 手動で新しいOBJを作成する代わりに、あなたが作成するのに役立ちnew'll
- プロトタイプコンストラクタ共通のない新しいOBJ __proto__ポイント、新しいあなたがそれを行うのに役立ちます。
- コンストラクタこのスコープは尖ったインスタンス自体になります。
- 代わりに手動で返すのに役立ちます新しい、新しいOBJを返します。
- new出来的实例的__proto__会指向构造函数的prototype。构造函数的方法,实例可以直接调用。
- vue实例化的构造函数在哪?
项目的 vue 文件夹下 core / instance / index.js ( 感谢 smallW)
-
Vue 2.0 为什么选用 Flow 进行静态代码检查而不是直接使用 TypeScript?
- vue源码的三要素vm,compiler,watcher
- 核心代码init初始化了什么?
- 生命周期initLifecycle
- 事件initEvents
- 初始化渲染initRender(vm)
- initInjections
- initState
具体参考:vue.js源码解析四
- Vue实现数据监听以及单向数据流的主要方式:
export function defineReactive(obj, key, val, customSetter, shallow) { const dep = new Dep(); const property = Object.getOwnPropertyDescriptor(obj, key); if (property && property.configurable === false) { return; } // cater for pre-defined getter/setters const getter = property && property.get; const setter = property && property.set; if ((!getter || setter) && arguments.length === 2) { val = obj[key]; } let childOb = !shallow && observe(val); Object.defineProperty(obj, key, { enumerable: true, configurable: true, get: function reactiveGetter() { const value = getter ? getter.call(obj) : val; if (Dep.target) { dep.depend(); if (childOb) { childOb.dep.depend(); if (Array.isArray(value)) { dependArray(value); } } } return value; }, set: function reactiveSetter(newVal) { const value = getter ? getter.call(obj) : val; /* eslint-disable no-self-compare */ if (newVal === value || newVal !== newVal && value !== value) { return; } /* eslint-enable no-self-compare */ if (process.env.NODE_ENV !== 'production' && customSetter) { customSetter(); } if (setter) { setter.call(obj, newVal); } else { val = newVal; } childOb = !shallow && observe(newVal); dep.notify(); } }); }
4.vue源码中的神奇用法:
-
判断是否为 undefined
let isUndef = function(v) { return v === undefined || v === null }
-
判断是否不为空
let isDef = function(v) { return v !== undefined && v !== null }
-
判断是否为原始数据类型
let isPrimitive = function(value) { return typeof value === 'string' || typeof value === 'number' || typeof value === 'symbol' || typeof value === 'boolean'; }
-
判断是否为 Object 类型
isPrimitive =関数(値){ましょう OBJを返す== nullの&& typeofをOBJ === 'オブジェクト'!。 }
-
元のオブジェクトかどうかを確認
CONST _toString = Object.prototype.toString; //オブジェクトが元のメソッドを継承 isPlainObjectは=関数(OBJ)させ、{ _toString.call(OBJ)=== '[オブジェクトのオブジェクト]'返します; }
-
オブジェクトが正であるかどうかを判断するには
CONST _toString = Object.prototype.toStringは; //オブジェクトが元のメソッドを継承 させisRegExp =関数(V)を{ '[正規表現オブジェクト]' === _toString.call(V)を返します; }
Vueの5.Reactなど、ジャンプの前に最初の迎撃ルートを行います。プラスの方法は、ページと統計コードに追加する必要があります。