Vue.js基礎知識総括編1
9714 ワード
Vue.js基礎知識総括編1ガイド VUE.JSは何ですか. テンプレート構文:補間、命令、略語 計算キャッシュとMethods 計算属性とリスニング属性 ClassとStyleバインド 条件レンダリング リストレンダリング データインタラクション
一.VUE.JSは何ですか. Vue.jsはユーザインタフェースを構築する漸進的なフレームワークである. Vue.jsは極めて簡素なMVVMフレームワーク である. VueはIE 8および以下のバージョン をサポートしていません.尤雨渓はVueです.jsフレームワークの著者は、2014年2月、先端開発ライブラリVueをオープンした.js. 2016年9月3日、Vueの著者尤雨渓は技術顧問としてアリババWeexチームに加盟することを正式に発表した.
MVVMフレームワーク(MVVMはコードを3層に分け、データの双方向バインドが可能) Mモデル層(データを保存するためのもの) Vビューレイヤ(HTMLの内容を表示し、ページにレンダリングされた内容) VMビューモデル層(Vueというフレームワーク)は、MとVの2つの層 を接続するために使用される.
データの双方向バインド M層が変化すると、VM層を介してV層が を自動的に更新する. V層が変化すると、VM層を介してM層が を自動的に更新する.双方向データバインディングは、データとビューの双方向バインディングであり、データが変化するとビューも変化し、ビューが変化するとデータも変化する.
es 5のObject.defineProperty()
Vueがなぜデータ駆動を実現できるのかは、Vueのフレームワークがes 5のObjectを使用するためである.defineProperty()関数は、データを観測し、データが変化すると自動的にいくつかのコードが実行されます.例えば、spanとobjの関連付けを、set関数が実行されると、spanのコンテンツはobjのaのコンテンツになります. Vueの一般的な2つの使用方法: 1、scriptラベルを直接vueファイルに導入します. 2、vueファイルをwebpackで導入します.
テンプレート構文:補間、コマンド、省略 1.≪データ・ドライバ|Data Driver|emdw≫:データが変更されると、ビューが自動的に更新されます.例えば、コンソールにvmを入力.a=「こんにちは」;ページの内容は「こんにちは」と表示されます. 2.テンプレート構文: 計算プロパティcomputed:{}computedはオブジェクトで、オブジェクトは関数です.ビューレイヤで、呼び出すときは、計算プロパティのプロパティ名を直接書き、()を付けないでください. 計算属性のsetterおよびgetter計算属性の値が変更されたときにsetが実行されます.デフォルトではgetが実行され、取得時にgetが実行されます. methodメソッド
計算用属性(計算属性にキャッシュがあるため)は推奨、vmの実行は推奨されない.str=「abc」の場合、このコードはd()とは何の関係もありませんが、d()が実行され、ビューが変化すればmethodsでメソッドが実行されることを意味します.
同じ関数を計算プロパティではなくメソッドとして定義できます.両方式の最終結果は確かに全く同じである.しかしながら、異なるのは、計算属性がそれらの依存に基づいてキャッシュされることである.依存関係が変更された場合にのみ、それらは再評価されます.対照的に、呼び出し方法は、再レンダリングがトリガーされるたびに関数を再実行します.計算属性キャッシュ計算属性キャッシュは、パフォーマンス消費を低減することができる. リスニング属性 classとstyle class v-bindバインドプロパティclass、classに値を割り当て、「abc」はdataの変数です. styleはstyleをバインドし、値はオブジェクトです. 条件レンダリングv-ifおよびv-show v-if v-ifとv-else-if、v-elseを組み合わせて使用します.
小さなケースでは、切り替えボタンを作り、ボタンをクリックしてdivボックスの追加と削除の効果を実現します.bln:trueの場合、divを追加します.bln:falseの場合、divを削除します.要素上でv-if条件を使用してパケットをレンダリングするv-ifは命令であるため、要素に追加する必要があります.しかし、複数の要素を切り替えたい場合は?この場合、1つの要素を非表示のラップ要素として使用し、v-ifを使用することができます.最終的なレンダリング結果には要素は含まれません. keyで多重化可能な要素Vueを管理すると、可能な限り効率的に要素がレンダリングされ、通常は最初からレンダリングするのではなく既存の要素が多重化されます.Vueを非常に速くする以外にも、いくつかのメリットがあります.たとえば、ユーザーが異なるログイン方式を切り替えることを許可する場合:
では、上記のコードでloginTypeを切り替えると、ユーザーが入力した内容は消去されません.2つのテンプレートは同じ要素を使用しているので、置き換えられません.placeholderを置き換えただけです.
これは必ずしも実際のニーズに合致しないため、Vueは「この2つの要素は完全に独立しており、多重化しないでください」と表現する方法を提供しています.一意の値を持つkeyプロパティを追加するだけです.
キー属性が追加されていないため、要素は効率的に多重化されます. v-show v-showは要素のCSS属性displayを簡単に切り替えるだけです.bln:trueで表示され、bln:falseで非表示になります.非表示にすると、ノードにdisplayのプロパティが追加され、ノードは直接削除されません.v-ifとの違いは、v-if値がfalseの場合、ノードが直接削除され、v-showはノードが削除されないことです.
v-showは要素もv-elseもサポートしていません. v-showとv-ifの区別ドキュメントの説明:v-ifは、切替中に条件ブロック内のイベントリスナーとサブコンポーネントが適切に破棄され、再構築されることを保証するため、「真」の条件レンダリングです.
v-ifも不活性です.初期レンダリング時に条件が偽の場合、条件が初めて真になるまで条件ブロックのレンダリングが開始されません.
それに比べて、v-showはずっと簡単です.初期条件が何であれ、要素は常にレンダリングされ、CSSに基づいて簡単に切り替えるだけです.
一般に、v-ifはより高いスイッチングオーバーヘッドを有し、v-showはより高い初期レンダリングオーバーヘッドを有する.したがって、非常に頻繁に切り替える必要がある場合は、v-showを用いるのが好ましい.実行時に条件が変更されない場合は、v-ifを使用するとよい.リストレンダリングv-forはデータをループ操作し、ループ後にいくつかのデータをページに表示し、配列とオブジェクトをリストレンダリングすることができます.配列が最も多く使われている.
v-forの詳細については、https://cn.vuejs.org/v2/guide/list.html
一.VUE.JSは何ですか.
var obj = {a : 1}
// obj a
Object.defineProperty(obj, "a", {
set(newVal){ // obj.a ,
console.log('set:', newVal)
span1.innerHTML = newVal; //
},
get(){ // obj.a ,
console.log('get');
return 123
}
});
Vueがなぜデータ駆動を実現できるのかは、Vueのフレームワークがes 5のObjectを使用するためである.defineProperty()関数は、データを観測し、データが変化すると自動的にいくつかのコードが実行されます.例えば、spanとobjの関連付けを、set関数が実行されると、spanのコンテンツはobjのaのコンテンツになります.
テンプレート構文:補間、コマンド、省略
{{ message }}
var app = new Vue({
el: '#app',
data() {
return{
message: 'Hello Vue!';
}
}
})
:
hellov-bind : v-bind div title vue message 。 v-bind:title="message" :title="message", , 。 : Message: {{ msg }} v-once : 1 {{ msg }} :
JS: {{ number + 1 }} {{ ok ? 'YES' : 'NO' }} {{ message.split('').reverse().join('') }}
v-model,计算属性与侦听属性
- v-model
一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件,但是像单选框、复选框等类型的输入控件可能会将 value 特性用于不同的目的。model 选项可以用来避免这样的冲突。
v-model 实现视图层发生变化时,数据也发生变化。例如下列代码,当输入的 a 和 b 的值发生变化时,c 的值也会被计算出来,并自动显示。
+
=
{{c}}
var vm = new Vue({
el:"#app",
data(){
return {
a : 1,
b : 2
}
},
computed:{
c(){
return Number(this.a) + Number(this.b);
}
}
})
computed:{
c(){
return Number(this.a) + Number(this.b);
}
}
computed:{
c : {
get(){
console.log('get');
return this.a+this.b;
},
set(v){
console.log('set:', v)
}
}
}
{{d()}}
method:{
d(){
console.log('d ');
return Number(this.a) + Number(this.b);
},
}
計算用属性(計算属性にキャッシュがあるため)は推奨、vmの実行は推奨されない.str=「abc」の場合、このコードはd()とは何の関係もありませんが、d()が実行され、ビューが変化すればmethodsでメソッドが実行されることを意味します.
同じ関数を計算プロパティではなくメソッドとして定義できます.両方式の最終結果は確かに全く同じである.しかしながら、異なるのは、計算属性がそれらの依存に基づいてキャッシュされることである.依存関係が変更された場合にのみ、それらは再評価されます.対照的に、呼び出し方法は、再レンダリングがトリガーされるたびに関数を再実行します.
watch:{
a(v){
this.c = Number(this.b) + Number(v);
},
b(v){
this.c = Number(this.a) + Number(v);
}
}
var app = new Vue({ el: '#app', data: { abc:"xyz" } }})
添加多个class 属性
对象的写法
var app = new Vue({ el: '#app', data: { classObj:{ "xyz":true, "abc":false } } }})
数组的写法:
123
data: { a : "x", b : "y" }
123
data: { classArr : ["a", "b-c"] }
123
data: { a:'blue', c:100 }
123
data: { classObj: { background:'yellow', 'font-size':'50px'} }
123
data: { a:{background:'yellow'}, b:{color:'orange'} }
123
data: { classArr: [{background:'red'}, {color:'green'}] }
小さなケースでは、切り替えボタンを作り、ボタンをクリックしてdivボックスの追加と削除の効果を実現します.bln:trueの場合、divを追加します.bln:falseの場合、divを削除します.
hello
var vm = new Vue({
el:"#app",
data(){
return {
bln : true
}
},
methods:{
handle(){
this.bln = !this.bln;
}
}
})
Title
Paragraph 1
Paragraph 2
では、上記のコードでloginTypeを切り替えると、ユーザーが入力した内容は消去されません.2つのテンプレートは同じ要素を使用しているので、置き換えられません.placeholderを置き換えただけです.
これは必ずしも実際のニーズに合致しないため、Vueは「この2つの要素は完全に独立しており、多重化しないでください」と表現する方法を提供しています.一意の値を持つkeyプロパティを追加するだけです.
キー属性が追加されていないため、要素は効率的に多重化されます.
v-showは要素もv-elseもサポートしていません.
?
v-ifも不活性です.初期レンダリング時に条件が偽の場合、条件が初めて真になるまで条件ブロックのレンダリングが開始されません.
それに比べて、v-showはずっと簡単です.初期条件が何であれ、要素は常にレンダリングされ、CSSに基づいて簡単に切り替えるだけです.
一般に、v-ifはより高いスイッチングオーバーヘッドを有し、v-showはより高い初期レンダリングオーバーヘッドを有する.したがって、非常に頻繁に切り替える必要がある場合は、v-showを用いるのが好ましい.実行時に条件が変更されない場合は、v-ifを使用するとよい.
{{val + ' ------- ' + ind }}
var vm = new Vue({
el:"#app",
data(){
return {
str : "",
arr : [
"a", "b", "c", "d"
]
}
},
methods:{
fn(){
this.arr.push( this.str );
}
}
})
v-forの詳細については、https://cn.vuejs.org/v2/guide/list.html