Vue の概要
Vue は、ユーザー インターフェイスを構築するための進歩的なフレームワークであり、他の大規模なフレームワークとは異なり、ボトムアップでレイヤーごとに適用されるように設計されています。Vue のコア ライブラリはビュー レイヤーのみに焦点を当てており、使いやすいだけでなく、サードパーティのライブラリや既存のプロジェクトとの統合も簡単です。
Vue の機能
1. MVVM パターンに従う
2. コーディングが簡単、サイズが小さく、操作効率が高く、モバイル/PC開発に最適
3. UI 自体にのみ焦点を当てており、他のサードパーティ ライブラリ開発プロジェクトも紹介できます。
3. Vue el:mountの基本的な使い方
データ: モデルデータ
メッセージ: データ
vueの基本的な使い方
</head>
<本文>
<div id="アプリ">
<p>{ {msg}}</p>
</div>
<div id="追加">
<p>{ {msg}}</p>
</div>
<!--vue.js をインポートします-->>
<script src="./vue.js"></script>
<スクリプト>
//vueをインスタンス化する
新しいビュー({
アプリ'、
データ:{
メッセージ:「xxx」
}
})
</script>
</body>
</html>
Vショーの使用
</head>
<本文>
<div id="アプリ">
<div v-show="money>=1000"> 鍋を食べる</div>
<div v-show="money>=2000">ハイディラオ</div>
<div v-show="money>=500">饭</div>
<div v-show="money<500">滚</div>
<時間>
<!-- 二重分岐 -->
<div v-show="age>=18">バー</div>
<div v-show="age<18">ゴミを拾う</div>
</div>
<script src="./vue.js"></script>
<スクリプト>
新しいビュー({
アプリ'、
データ:{
お金:1500、
年齢:25
}
})
</script>
</body>
<本文>
<!-- v-show と v-if の両方を使用して、ラベルの表示と非表示を制御できます。
<label v-show='Boolean'></label>
<label v-if='boolean'></label>
ブール値が true の場合は表示され、ブール値が false の場合は非表示になります。-->
<div id="アプリ">
<div v-show="display">私は v-show によって制御されています</div>
<div v-if="display">私は v-if に支配されています</div>
</div>
<script src="./vue.js"></script>
<スクリプト>
新しいビュー({
アプリ'、
データ:{
ディスプレイ:画面
}
})
</script>
<!-- 面接での質問
Vショー
本質的には、ラベル表示が none に設定され、コントロールが非表示になることです。CSSに基づいて切り替えるだけです。
v-show は初期レンダリング コストが高くなります。
v-show は、エフェクトを頻繁に切り替える場合に適しています。
v-if
DOM 要素を DOM ツリーに動的に追加または削除します。
v-if はスイッチング コストが高くなります。
v-if は、動作条件がほとんど変化しない状況に適しています。-->
</body>
</html>
ヴオン
</head>
<本文>
<div id ="アプリ">
<button v-on:click="fn1">クリックしてください</button>
<button v-on:dblclick="fn2">666</button>
<button v-on:mouseenter="fn3">咦~</button>
</div>
<script src ="./vue.js"></script>
<スクリプト>
新しいビュー({
アプリ'、
//vueのどこにメソッドを置くか
メソッド:{
fn1(){
アラート('なぜ')
}、
fn2(){/
アラート('どうしたの')
}、
fn3(){
アラート('死ぬほど退屈')
}、
}
})
</script>
</body>
</html>
v モデル
<本文>
<div id="アプリ">
<input type="text" v-model="msg">
<p>{ {msg}}</p>
<select v-model="フルーツ">
<option value="apple">苹果</option>
<option value="orange">橘子</option>
<option value="banana">香蕉</option>
</選択>
<input type="checkbox" v-model="chk">
</div>
<script src="./vue.js"></script>
<スクリプト>
新しいビュー({
アプリ'、
データ :{
メッセージ:''、
フルーツ:''、
確認: チュア
}
})
</script>
</body>
</html>
v-if
<本文>
<div id="アプリ">
<div v-if="money>=1000"> 鍋を食べる</div>
<div v-else-if="money>=2000">ハイディラオ</div>
<div v-else-if="money>=500">饭</div>
<div v-else>滚</div>
<時間>
<!-- 二重分岐 -->
<div v-if="age>=18">酒吧</div>
<div v-else>ゴミを拾う</div>
</div>
<script src="./vue.js"></script>
<スクリプト>
新しいビュー({
アプリ'、
データ:{
お金:1500、
年齢:25
}
})
</script>
</body>
</html>
v-for におけるキーの役割
<本文>
<div id="アプリ">
<button @click="list.splice(1,0,{id:4,name:'yy'})">追加</button>
<ul>
<li v-for="リスト内の項目":key="項目.index">
<input type="チェックボックス">
<span>{ {item.name}}</span>
</li>
</ul>
<!-- 現象: rr にチェックを入れて、添え字 1 の位置に yy を追加すると、yy にはチェックが入っていて、rr にはチェックが入っていないことがわかりました。
理由: v-for は現在の要素を最大限に再利用しようとするため、無秩序な状態バインディングが発生します。
解決策: v-for の後にキー属性を追加すると、キーがこのデータの一意の値 (通常は文字列や数値タイプではなく ID) をバインドします。
-->
</div>
<script src="./vue.js"></script>
<スクリプト>
新しいビュー({
アプリ'、
データ:{
リスト:[
{id:1,name:'ww'},
{id:2、名前:'rr'}、
{id:3、名前:'tt'}、
】
}
})
</script>
</body>
</html>
v-for は配列を反復処理します
<本文>
<!-- 構文: <label v-for='配列内の項目'></label> -->
<!-- [原文]
for (let i = 0 ; i < list.length; i ++){
let li = document.createElement('li')
li.innerHTML = リスト[i]
ul.appendChild(li) -->
<div id="アプリ">
<button @click="add">最後に要素を追加します</button>
<ul>
<!-- 最初のパラメータは要素で、2 番目のパラメータは添え字です。名前とは関係ありません。-->
<!-- ほとんどの場合、これは要素を取得するだけであり、添字は使用されない場合があります。-->
<li v-for="(item,index) リスト内">{ {index}}-{ {item}}</li>
</ul>
</div>
<script src="./vue.js"></script>
<スクリプト>
新しいビュー({
アプリ'、
データ:{
リスト:['aa','ss','dd','ff']
}、
メソッド:{
追加(){
this.list.push('aa')
}
}
})
</script>
</body>
</html>
v-for は数値を反復します
<本文>
<div id="アプリ">
<ul>
<!-- 指定されたループ数
数値は 1 ~ 99 -->
<li v-for="99 の番号">{ {番号}}</li>
</ul>
</div>
<script src="./vue.js"></script>
<スクリプト>
新しいビュー({
アプリ'
})
</script>
</body>
</html>
v-for はオブジェクトを走査します
<本文>
<!-- v-for はオブジェクトをトラバースできます
構文: <label v-for="(val,key)in object"></label>
<label v-for="オブジェクト内の値"></label> -->
<div id="アプリ">
<ul>
<!-- このようなタグは、オブジェクトのプロパティと同じ数だけ存在します。-->
<li v-for="obj 内の項目"> { {item}}</li>
<時間>
<!-- 最初のパラメータは属性値、2 番目のパラメータは属性名です。-->
<!-- 名前とは関係がなく、属性値のみを取得するために省略することもできます。-->
<li v-for="(val,key) in obj">{ {val}}-{ {key}}</li>
</ul>
</div>
<script src="./vue.js"></script>
<スクリプト>
新しいビュー({
アプリ'、
データ:{
オブジェクト:{
名前:「シャオファン」、
年齢:「88」、
sex:'男'
}
}
})
</script>
</body>
</html>
vバインド
<本文>
<!-- インライン属性をハードコードしないようにします -->
<div id="アプリ">
<a href="http://www.baidu.com">ジャンプ</a>
<a v-bind:href="url">ジャンプ</a>
<button @click="change" target="_blank">跳转</button>
</div>
<script src="./vue.js"></script>
<スクリプト>
新しいビュー({
アプリ'、
データ:{
URL:「http://www.taobao.com」
}、
メソッド:{
変化(){
this.url='http://www.mi.com'
}
}
})
</script>
</body>
</html>
クッキー
<!-- 【クッキー】
1: 使用シナリオ:
1: パスワードを記憶し、次回から自動的にログインします。
2: ユーザーの閲覧データを記録し、商品(広告)を推奨します。
2: 特徴:
1: Cookie はブラウザ側に保存されます。
2: 1 つの Cookie によって保存されるデータは 4KB を超えることはできません。
3: Cookie 内のデータはドメイン名の形式で識別されます。
4: Cookie 内のデータには有効期限があり、有効期限が過ぎるとデータはブラウザによって自動的に削除されます。
5: Cookie 内のデータはリクエストとともに自動的にサーバー側に送信されます。
三つ:
Cookie ストレージ メカニズムには多くの欠点があるため、HTML5 ではこれを使用せず、代わりに改良された WebStorage ストレージ メカニズムを使用します。
(ローカルストレージとセッションストレージ) -->
イベントオブジェクト
<本文>
<div id="アプリ">
<button @click="click">单击</button>
<button @dblclick="dblclick">双击</button>
<input type="text" placeholder="内容" @blur="blurText" @focus="focusText" @keydown="keydownText" @keyup="keyupText" @input="inputText">
</div>
<script src="./vue.js"></script>
<スクリプト>
// ロード イベント: ページ全体がロードされた後にトリガーされます
// window.onload = function(){
//alert("ページの読み込みが完了しました")
// }
新しいビュー({
アプリ'、
メソッド:{
クリック(){
alert('シャオルーの恋愛脳');
}、
dblclick(){
alert('シャオファンはシャオゾウが寝ている醜い写真を撮りました');
}、
BlurText(){
console.log("焦点が合っていないぼかしイベント");
}、
focusText(){
console.log("フォーカスイベント取得");
}、
keydownText(){
console.log("鍋");
}、
keyupText(){
console.log("ポット");
}、
入力テキスト(){
console.log("ok");
}
}
})
</script>
</body>
</html>
ライフサイクル
<本文>
<div id="example">{ {メッセージ}}</div>
<script src="./vue.js"></script>
<スクリプト>
var vm = 新しい Vue({
例'、
データ:{
メッセージ:「一致」
}、
beforeCreate(){
console.log('作成前');
}、
作成した(){
console.log('cresated');
}、
beforeMount(){
console.log('beforeMount');
}、
マウントされた(){
console.log('マウント済み');
}、
beforeUpdate(){
console.log('更新前');
}、
更新しました(){
console.log('更新');
// コンポーネントが更新された後、$destroyed 関数を呼び出してコンポーネントを破棄します
//this.$destory();
}、
beforeDestroy(){
console.log('beforeDestroy');
}、
破壊されました(){
console.log('破壊');
}、
})
</script>
</body>
</html>
為替レートを計算する
<本文>
<div id="アプリ">
<p class="title">為替レート計算ツール</p>
<ul>
<リ>
<span>{ {from.currency}}</span>
<input v-model="from.amount"></input>
</li>
<li v-for="アイテムを次へ" v-bind:data-currency="item.currency" v-on:click="changeCurrency">
<span>{ {item.currency}}</span>
<span>{ {item.amount}}</span>
</li>
</ul>
<p class="intro">マウスをクリックして通貨の種類を切り替えます</p>
</div>
<script src="./vue.js"></script>
<スクリプト>
let rate={
CNY:{CNY:1 、JPY:16.876、HKD:1.1870、USD:0.1526、EUR:0.1294}、
JPY:{CNY:0.0595,JPY:1 ,HKD:0.0702, USD:0.0090, EUR:0.0077 },
HKD:{CNY:0.8463, JPY:14.226,HKD:1, USD:0.1286, EUR:0.10952 },
USD:{CNY:6.5813, JPY:110.62, HKD:7.7759, USD:1, EUR:0.85164 },
ユーロ:{CNY:7.7278、JPY:129.89、HKD:9.1304、USD:1.1742、EUR:1 }、
}
let vm = 新しい Vue({
アプリ'、
データ:{
から:{通貨:'CNY'、金額:100}、
に:[
{通貨:'JPY',金額:0},
{通貨:'HKD',金額:0},
{通貨:'USD'、金額:0}、
{通貨:'EUR',金額:0},
】
}、
メソッド:{
交換(から、金額、まで){
return(amount * rate[from][to]).toFixed(2)
}、
changeCurrency(イベント){
const c = イベント.currentTarget.dataset.currency;
const f = this.from.currency;
this.from.currency= c;
this.to.find(_ => _.currency === c).currency = f;
}
}、
時計:{
から:{
ハンドラー(値){
this.to.forEach(item => {
item.amount = this.exchange(this.from.currency,
この金額、品目、通貨)
});
}、
深い:本当、
即時:真
}
}
})
</script>
</body>
</html>
カウンター
<本文>
<script src="./vue.js"></script>
<div id="アプリ">
<button @click="sub">-</button>
<span v-text="num"></span>
<button @click="add">+</button>
</div>
<スクリプト>
新しいビュー({
el:"#アプリ",
データ:{
番号:1
}、
メソッド:{
サブ:関数(){
if(this.num>0){
this.num--;
}それ以外{
alert("すでに最小");
}
}、
追加:関数(){
if(this.num<20){
this.num++;
}それ以外{
alert("上限に達する")
}
}
}
})
</script>
</body>
</html>
style属性をバインドする
オブジェクトモードでクラス属性をバインドする
<title>ドキュメント</title>
<スタイル>
。箱 {
幅: 300ピクセル;
高さ: 300ピクセル;
境界線: 10 ピクセルの黄緑色の実線。
}
.bg{
背景色: コーンフラワーブルー;
}
</スタイル>
</head>
<本文>
<div id="アプリ">
<button @click="btn">こちら</button>
<!-- クラスを動的に設定したい場合は、オブジェクトに対しても設定します -->
<!-- 属性値: はクラス名です -->
<!-- 属性値: ブール値。true の場合は、このクラス名が存在することを意味します。false はクラス名がないことを意味します -->
<!-- <div class="box" v-bind:class="{bg:ture}"></div> -->
<!-- ブール値を変数名に変換し、データ内でこの変数を明確にします -->
<div class="box" v-bind:class="{bg:isBg}"></div>
</div>
<script src="../vue.js"></script>
<スクリプト>
新しいビュー({
アプリ'、
データ:{
isBg:true、
フラグ:0
}、
メソッド:{
btn(){
if(this.flag==0){
this.isBg=true
this.flag=1;
}
それ以外{
これは .isBg=false;
this.flag=0;
}
}
}
})
</script>
</body>
</html>
スタイルプロパティをオブジェクトとしてバインドする
<title>ドキュメント</title>
</head>
<本文>
<div id="アプリ">
<!-- インライン属性にスタイルを記述する -->
<div style="color:royalblue ; font-size: 48px;">黄翠瑞はとてもハンサムです</div>
<!-- inline 属性をオブジェクトに変換し、style 属性をオブジェクト形式でバインドします。
外側に{}を追加、属性値を文字列に変更、高さをカンマに変更、属性名をオブジェクト名に変更 -->
<div v-bind:style="{color:'red',fontSize:'48px'}">Xiao Zhong は恥知らずです</div>
<!-- 属性値を変数に変更します -->
<!-- 最初の色はスタイル名、2 番目の色は変数名で、データ内の変数と一致します -->
<div v-bind:style="{color:color,fontSize:size}">Xiao Zou は役に立たない</div>
<script src="../vue.js"></script>
<スクリプト>
新しいビュー({
アプリ'、
データ:{
赤色'、
サイズ: '24px'
}
})
</script>
</body>
</html>
計算されたプロパティ
計算されたプロパティの基本構造
<本文>
<!-- 計算されたプロパティ
計算ロジックのいくつかの属性を書き込むことができます。
通常の関数のように結果を直接返すのではなく、一連の計算を行った後に結果を返します。
同時に、データ内の特定の属性が適用されている限り、この属性が変更されると、計算された属性がこの変更を嗅ぎ分けて自動的に実行できます。
定義: 使用する属性が存在しないため、既存の属性から計算されます。
使用方法: 計算オブジェクトで計算プロパティを定義し、{ {メソッド名}} を使用して計算結果を ページに 表示します。-->
<スクリプト>
//基本構造
新しいビュー({
彼:''、
//データ
データ:{}、
// メソッド属性
// イベントバインディング、リターンなし、キャッシュなし
メソッド:{}、
// リスナー (構造を尊重)
// 値を返さずに値の変更をリッスンします
時計:{
リッスンするデータ (){}
}、
// 計算されたプロパティ (結果重視)
// リターンが必要で、結果のみが必要で、キャッシュが存在します。
計算された:{
計算されたプロパティ名() {
// 一連の計算の後
操作を処理した後に結果を返す
}
}
})
</script>
<!-- 計算されたプロパティのキャッシュ プロパティ
計算されたプロパティが初めて呼び出されるとき、結果が生成され、その結果がキャッシュされ、その後このプロパティが使用されるたびにキャッシュから取得されます。
依存関係が変更されると、再計算して結果を取得し、それをキャッシュします。-->
</body>
</html>
計算プロパティの基本的な使用法
<本文>
<div id="アプリ">
<p>元の文字列: { { メッセージ }}</p>
<p>反転された文字列を計算します: { {·reverseMessage·}}</p>
<p>元の文字列を小文字に変換します: { { toLowerCase}}</p >
</div>
<script src="../vue.js"></script>
<スクリプト>
新しいビュー({
アプリ'、
データ:{
メッセージ:「ABCDEFG」
}、
計算:{
// 反転した文字列を計算します
reverseMessage:function(){
// split() は文字列を文字列の配列に分割します
// reverse() は配列内の要素の順序を逆にします
// join() は配列内のすべての要素を文字列に変換します
return this.message.split('').reverse().join('')
}、
//元の文字列を小文字に変換します
toLowerCase(){
//substring(from,to) は、文字列内の指定された 2 つの添え字の間の文字を抽出します。
//toLowerCase() は文字列をトランペットに変換するために使用されます
this.message.substring(0,7).toLowerCase を返す
}
}
})
</script>
</body>
</html>
計算されたプロパティの完全な構造
<本文>
<!-- 1. 計算された各プロパティには、ゲッター関数とセッター関数が含まれます。
2. 計算プロパティはデフォルトでゲッター関数を使用しますが、セッター関数は一般的ではないため、一般的な計算プロパティのゲッターとセッターは記述されません。
3. getter 関数はデフォルトの使用法ですが、setter 関数はデフォルトの使用法ではありません。setter 関数を使用する場合は、setter 関数を手動で書き出す必要があります。
4. セッター関数の仮パラメータは変更したい値です -->
<!-- コンテナを準備します -->
<div id="アプリ">
姓:<input type="text" v-model="lastName"> <br><br>
名前:<input type="text" v-model="firstName"> <br><br>
フルネーム: <span>{ { fullNamel}</span> <br><br>
<button @click="btn">計算されたプロパティの値を変更します</button>
</div>
<!-- Vue をインポート -->
<script src="../vue.js"></script>
<スクリプト>
新しいビュー({
アプリ'、
データ(){
戻る {
名前:「チュチュ」、
姓:「胡」
}
}、
計算:{
フルネーム: {
// get: 値の取得時にトリガーされます
// 誰かが ful1Name を読み取ると、get が呼び出され、戻り値が fullName の値として使用されます。
得る(){
this.firstName +'_' +this.lastName を返します。
}、
//set; 値が設定されたときにトリガー
//計算されたプロパティが変更されると、set を呼び出します
セット(値){
console.log('set',value);
const arr = value.split('-')
this.firstName = arr[0]
this.lastName = arr[1]
}
}
}、
メソッド:{
btn(){
this.fullName = '胡英軍'
}
}
})
</script>
</body>
</html>
計算されたプロパティの完全な構造 2
<本文>
<スクリプト>
// 1. 宣言文字列
let str = '宇宙の中心 - 江西ソフトウエア職業技術大学';
let str1 = "宇宙の中心 - 江西ソフトウエア職業技術大学";
let str10 = '宇宙の中心 - 江西ソフトウエア職業技術大学';
// 2. 文字列が文字列内にあるかどうかを判断します
let index1 = str.index0f('宇宙')
console.log(index1);//0
// 3. 文字列をインターセプトします (最初のパラメーター: どの添字でインターセプトを開始するか、2 番目のパラメーター: インターセプトの長さ)。
str2 = str.substr(7,2) とします。
console.log(str2); // 江西省
// 4. 文字列を変更します (最初のパラメータ: 変更する文字列、2 番目のパラメータ: 変更された文字列。
let str3 = str.replace("ユニバース","インターネット")
console.log(str3);// インターネットの中心地 -- 江西ソフトウエア職業技術大学
// 5. 文字列を分割する
str4 = "23" とします
// この関数は配列を返さなければなりません
let array = str4.split(',')
// は区切り文字です。区切り文字が見つかると、文字列から削除され、部分文字列の配列が返されます。
// 区切り文字が見つからないか省略された場合、配列には文字列全体から構成される 1 つの要素が含まれます。
// 区切り文字が空の文字列の場合は、str を文字配列に変換します
console.log(array); //['Scatter', "Lang'," Hey', 'Yo']
// 6. 大文字と小文字の変換 (英語のみ大文字と小文字があり、中国語は存在しません)
console.log('ABCDEF'.toLowerCase());// 小文字の abcdef に変換します
console.log('abcdef'.toUpperCase());// 大文字のABCDEFに変換します
console.log('中国語には大文字と小文字が存在しません'.toLowerCase);
</script>
</body>
</html>
イベント修飾子
イベントメソッド
<!-- [イベントメソッド]
@click: 要素をクリックすると、クリック イベントが発生します。
@dbclick: 要素がダブルクリックされると、dbclick イベントが発生します。
@focus: focus イベントは、要素がフォーカスを取得したときに発生します。
@blur: 要素がフォーカスを失ったときにブラー イベントが発生します。
@submit: フォームが送信されると、submit イベントが発生します。
@keydown: キーボードが押されると、keydown イベントが発生します。
@keyup: キーボードを離すと、keyups イベントが発生します。
@mouse enter: マウス ポインターが選択された要素を通過 (進入) すると、mousedown イベントが発生します。
@mouse down: マウス ポインターが要素上に移動し、マウスの左ボタンが押されると、mousedown イベントが発生します。
@mouse Leave: マウスが選択された要素から離れると、mouseleave イベントが発生します。
@mouse move: マウスポインターが指定された要素内で移動すると、mousemove イベントが発生します。
@mouse out: マウス ポインタが選択された要素または子要素から離れると発生します。
@mouse over: マウス ポインターが要素の上にあると、mouseover イベントが発生します。
@mouse up: マウス ポインターが要素上に移動し、マウスの左ボタンが放されると、mouseup イベントが発生します。-->
<!-- [イベント]
JavaScript のイベントは、HTML ドキュメントまたはブラウザーで発生する対話型操作として理解でき、Web ページを対話型にします。
一般的なものは、読み込みイベントとマウス イベントです。
【イベントの流れ】
DOM はツリー構造であるため、イベントが親子ノードにバインドされ、子ノードがトリガーされる場合、イベント フローに関わるシーケンスの問題が発生します。
ページがイベントをトリガーすると、ページは特定の順序でイベントに応答します。イベント応答プロセスはイベント フローです。
【3段階のjsイベントの流れ】
イベント キャプチャ フェーズ (キャプチャ フレーズ): イベントはトップレベル オブジェクトによってトリガーされ始め、ターゲット要素まで段階的に下に伝播します。
ターゲットフェーズ (ターゲットフレーズ): イベントがバインドされている要素上。
イベントバブリングフェーズ (バブリングフレーズ): イベントは最初に特定の要素によって受信され、次に非特定の要素まで段階的に伝播されます。
(イベントのキャプチャは上から下に行われ、イベントのバブリングは下から上に行われます。) -->
<div id="アプリ">
<!-- このボタンをクリックすると、fn1 関数が呼び出されます -->
<button v-on:click="fn1">クリックしてください</button>
<!-- ボタンをダブルクリックすると、fn1 関数が呼び出されます -->
<button v-on:dblclick="fn1">双击666</button>
<!-- このボタンを移動すると、fn2 関数が呼び出されます -->
<button v-on:mouseenter="fn2">私の中に飛び込んでください</button>
<!-- 省略形: v-on: を @ に変更するのが省略形です -->
<h4>以下は略語です</h4><hr>
<!-- このボタンをクリックすると、fn1 関数が呼び出されます -->
<button @click="fn1">クリックしてください</button>
<!-- ボタンをダブルクリックすると、fn1 関数が呼び出されます -->
<button @dblclick="fn1">666 をダブルクリック</button>
<!-- このボタンを移動すると、fn2 関数が呼び出されます -->
<button @mouseenter="fn2">私の中に入ってください</button>
</div>
<script src="./vue.js"></script>
<スクリプト>
新しいビュー({
アプリ'、
//Vue のメソッドを配置する場所
メソッド:{
fn1(){
alert('クリックして実行しますか?')
}、
fn2(){
alert('やりますか?')
}
}
})
</script>
</body>
</html>
イベントバブリング
<本文>
<div id="アウター" @click="">
<button @click="click"> クリックしてください </button>
</div>
<スクリプト>
// イベント バブリングとイベント キャプチャは、ページ内のイベント フロー (イベントの順序) の問題を解決するために、それぞれ Microsoft と Netscape によって提案されました。
// イベントのバブリング:
// Microsoft は、イベント バブリングと呼ばれるイベント ストリームを提案しました。
// イベントのバブリングは水の中に石を入れることにたとえられ、泡は常に水の底から現れます。
// つまり、イベントは最も内側の要素から開始され、ドキュメント オブジェクトまで上向きに伝播します。
// したがって、イベントバブリングの概念では、ボタン上のクリックイベントの順序は、button→div→body→html→documentとなるはずです。
// イベントキャプチャ:
// Netscape は、イベント キャプチャ (イベント キャプチャ) と呼ばれる別のイベント ストリームを提案しました。11 イベントバブリングとは逆に、イベントは最外層から特定の要素まで発生します。
// したがって、イベントキャプチャの概念では、ボタンボタン上でクリックイベントが発生する順序は、document→html→bodv→div→button となるはずです。
// その後、W3C は Netscape と Microsoft の間の戦争を鎮めるために妥協方法を採用し、統一された標準優先のキャプチャとバブリングを策定しました。
</script>
</body>
</html>
イベント修飾子の概要
<本文>
<!-- イベント修飾子
event.preventDefault()/デフォルトの動作を防止するか、event.stopPropogation()/イベントのバブリングを防止します。
上記のメソッドは DOM イベントの詳細を処理する必要があり、コードが煩雑になります。
この問題を解決するために、Vue.js はイベント修飾子を提供します。
修飾子は、ドットで始まるディレクティブ接尾辞によって示されます。-->
<!-- stop は、バブリング イベントが伝播し続けるのを防ぎます -->
a v-on:click.stop="doThis"></ a>
<!-- .self イベントのターゲットが現在の要素自体である場合、イベントをトリガーします -->
<ul @click.self="ulclick"></ul>
<!-- .capture は、元のデフォルトのバブリング方式をキャプチャ方式に変更します -->
<!-- .prevent イベントのデフォルト動作を防止します -->
<!-- @submit.prevent submit イベントによってページがリロードされなくなりました -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- .stop.prevent 修飾子を連鎖させて、バブリングとデフォルトの動作の両方を防ぐことができます。-->
<a v-on:click.stop.prevent="doThat"></ a>
<!-- 修飾子のみ -->
<form v-on:submit.prevent></form>
</body>
</html>
リスナー
リスナーの基本構造
<スクリプト>
// [リスナー]
// 関数: データが変更されたかどうかを監視し、変更があった場合に関数を呼び出すために使用されます。
// 構文: データおよびメソッドと同じレベルでウォッチを作成します。
新しいビュー({
彼:''、
データ:{}、
メソッド:{}、
// リスナー
時計:{
// パラメータ 1: 変更された値。
// パラメータ 2: 変更前の値。
リッスンするデータ (newValue、oldValvue) {
}
}
})
</script>
リスナーのベースは以下に属します
<本文>
<div id="アプリ">
<button @click="msg='hahahahaha'">msg の値を変更します</button>
<p>{ {msg}}</p>
</div>
<script src="./vue.js"> </script>
<スクリプト>
新しいビュー({
アプリ'、
データ:{
msg: 'カクカクカク'
}、
// リスナーをどこに記述するか
時計:{
// データ変更のリスナー
// 基本データ型、これら 2 つのパラメータには意味があります
msg(新しい値,古い値){
// データ変更をリッスンした後、完了する必要がある動作
console.log('データが変更されました', newValue, oldValue);
}
}
})
</script>
</body>
配列でのリスナーの使用
<本文>
<div id="アプリ">
<ul>
<li v-for="リスト内の項目">{ {項目}}</li>
</ul>
<button @click="list.push('Pleasant Goat')">アイテムを追加</button>
</div>
<script src="./vue.js"></script>
<スクリプト>
新しいビュー({
アプリ'、
データ:{
リスト:[「シャオファンはとても役に立たない」、「シャオゾンはたくさんのものを持っている」、「シャオルーの恋愛脳」]
}、
時計:{
list(newValue,oldVaule){
console.log('データが変更されました', newValue, oldVaule,);
}
}
})
</script>
</body>
[配列を聞く]
配列はアプリケーション タイプであり、より複雑なリスニング ルールがあります。
理論的には、配列内の要素の値を変更したり、配列に新しい要素を追加したりするなど、配列の内容を変更しても、配列自体のアドレスは変更されません。
このため、Vue.is では、標準の配列操作メソッドを使用して配列に加えられた変更をインターセプトできるように、配列に対して特別な処理が行われています。
1. Vue は次の配列の変更を検出できません。
a. インデックス値を使用して配列を直接設定する場合、例: vm.items[index0fItem] = newValue
b. 配列の長さを変更する場合、例: vm.items.length = newlength
2. 標準的な方法を使用して配列を変更すると、リッスンできるようになります
https://v2.cn.vueis.org/v2/guide/list.html#%E6%95%B0%E7%BB%84%E6%9B%B4%E6%96%B0%E6%A3%80 %E6%B5%8B Push() 最後に追加 Pop() 最後に削除
unshift() ヘッドが追加されました
シフト() 先頭削除
splice() 削除、追加、置換
sort()ソート
reverse() 逆順
(Vue は監視対象の配列の変更メソッドをラップするため、ビューの更新もトリガーします。上記はラップされたメソッドです。) -->
<本文>
<div id="アプリ">
<button @click="list.pop()">アイテムを削除する</button>
<button @click="list.push('Pleasant Goat')">アイテムを追加</button>
<ul>
<li v-for="リスト内の項目">{ {項目}}</li>
</ul>
</div>
<script src="./vue.js"></script>
<スクリプト>
新しいビュー({
アプリ'、
データ:{
リスト:[「シャオファンはとても役に立たない」、「シャオゾンはたくさんのものを持っている」、「シャオルーの恋愛脳」]
}、
時計:{
// 複合データ型。アドレスが変更されていないため、これら 2 つのパラメータは無意味です
// したがって、複合型では、これら 2 つのパラメータの値が同じであるため、これら 2 つのパラメータは通常は書き込まれません。これらが書かれていても、一方のみが書き込まれます。
list(newValue,oldVaule){
console.log('データが変更されました', newValue, oldVaule,);
}
}
})
</script>
</body>
アヤックス
Ajax は、ブラウザがサーバーと対話できるようにする API のセットです。
その役割は、ブラウザがサーバーと対話できるようにすることです。
サーバーにデータを要求してページを部分的に更新する手法です。
AJAX がポストリクエストを送信する
<!-- AJAX がポストリクエストを送信する
1. リクエストオブジェクトをインスタンス化する
2. open メソッドを呼び出し、リクエスト メソッドとリクエスト アドレスを渡します。
3. リクエストヘッダーを設定する
4. リクエスト成功後のコールバック関数を設定する
5. リクエストの送信
get リクエストで渡されるパラメータ: URL アドレスの直後に結合されますが、これはあまり安全ではありません。
ポストリクエストのパラメータ渡し: send() メソッドで渡す -->
<スクリプト>
// 1. リクエストオブジェクトをインスタンス化する
let xh = 新しい XMLHttpRequest
// 2. open メソッドを呼び出し、リクエスト メソッドとリクエスト アドレスを渡します
xh.open('post','https://autumnfish.cn/api/user/register')
// 3. リクエストヘッダーを設定します (固定構文、貼り付けるだけ)
xh.setRequestHeader("コンテンツタイプ","application/x-www-form")
// 4. リクエストが成功した後にコールバック関数を設定します。
xh.onload = function(){
// console.log(xhr.response);
let obj = JSON.parse(xhr.response)
コンソール.ログ(obj);
}
// 5. リクエストを送信する
// リクエスト形式: "キー=値"
xh.send('ユーザー名=彭磊')
</script>
</body>
</html>
リクエスト送信パラメータを取得する
<本文>
<!-- リクエストオブジェクトをインスタンス化する
openメソッドを呼び出し、リクエストメソッドとリクエストアドレスを設定します。
設定リクエスト完了後、コールバック関数へ
send メソッドを呼び出してリクエストを完了します -->
<スクリプト>
// リクエストオブジェクトをインスタンス化する
let xh = 新しい XMLHttpRequest
// open メソッドを呼び出し、リクエストメソッドとリクエストアドレスを設定します
xh.open('get','https://github.com/AutumnFish/testApi')
// onload メソッドを呼び出し、リクエストの完了後にコールバック関数を設定します
xh.οnlοad=function(){
// console.log(xh.response);
冗談を言う = JSON.parse(xh.response)
console.log(ジョーク);
}
// send メソッドを呼び出してリクエストを完了します
xh.send()
</script>
</body>