Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 最近日本中文字幕免费完整,久久国产视频在线观看,欧美在线国产

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          第二章 Vue指令

          一章節我們探討了Vue的入門,對Vue有了初步的了解,并且掌握了模板語法。本節課我們的學習目標是Vue的指令。

          首先解釋以下什么叫做指令,指定就是命令的意思,人們用指令表達自己的意圖。Vue中有多種指令,每種指令有不同的功能,比如有個指令的名字叫做v-text,此指令用于主要用來更新html標簽InnerText內容,等同于JS操作dom元素的text屬性。

          除此以外vue還提供了多種指令,接下來我們就開始詳細介紹這些指令的使用場景已經使用方式。

          2.1 什么是指令

          我們已經了解到Vue雖然使用場景與功能類似于JQuery,但是語法習慣完全不同于JQuery,比如Vue使用步驟主要有實例化Vue對象,掛載點使用模板語法綁定數據。除此以外Vue指令也是Vue使用中的重要組成部分,根據不同的指令有不同的功能,比如綁定事件,渲染InnerText數據,渲染InnerHtml數據。

          2.1.1 什么是Vue指令

          Vue中的指令存在的形式是以“v-”為前綴的特殊屬性,出現在html的標簽的屬性部分,功能是當表達式的值改變時,將其產生的連帶影響,響應式地作用于 DOM。

          Vue指令的組成部分如下所示。

          <tag標簽 v-指令名="表達式"> </tag標簽>

          2.1.2 DOM節點

          無論是傳統的原生js,還是老牌前端框架JQuery,包括正在學習的Vue,他們的功能主要都是操作dom節點對象,我們這里再復習一下dom節點的相關概念,因為指令就是對DOM節點的操作。在 HTML DOM 中 , 每一個元素都是節點,Vue指令就是節點的特殊屬性。Vue.js是數據驅動的,無需手動操作DOM,它通過指令語法,將DOM和數據綁定起來。一旦創建了綁定,DOM將和數據保持同步,每當變更了數據,DOM也會相應地更新。

          2.2 指令一覽

          Vue提供了多種內置的指令,不同的指令有不同的功能,在具體學習每種指令之前,我們先將部分常見指令以表格形式進行一覽,如圖2.1所示。

          圖2.1 部分指令一覽

          2.3 v-if & v-else-if & v-else指令

          先描述一個場景:現有一組標簽,此標簽展示內容只有在當前用戶符合某些條件的情況下才顯示。

          這種類型的功能在開發中是十分常見的,實現思路也很簡單,需要先進行判斷是否符合條件,根據判斷結果來決定是否展示標簽。在Vue中想要實現此種功能,就需要使用v-if指令。

          2.3.1 v-if指令

          我們使用v-if指令來實現剛才描述的場景,創建index.html文件,并使用上一章節中我們學習過的內容快速加載Vue環境,這里就不在重新闡述。index.html中判斷當前level的值是否大于等于10,如果大于10在頁面中顯示文字:“歡迎來自艾歐尼亞的最強王者上機!”如果levle的值小于10則什么都不顯示。為了實現此效果,我們需要使用到v-if指令。index.html代碼內容如2-1所示:

          例2-1 index.html

          1. <!DOCTYPE html>
          2. <html lang="en">
          3. <head>
          4. <meta charset="UTF-8">
          5. <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
          6. <title>v-if指令</title>
          7. </head>
          8. <body>
          9. <div id="app">
          10. <!--span只有在levle的值大于等于10的時候才顯示-->
          11. <span v-if="levle>=10">歡迎來自艾歐尼亞的最強王者上機!</span>
          12. </div>

          件綁定基本用法

          我們實現一個復雜的web應用,少不了與用戶的交互,那么用戶交互最直接相關的就是事件,我們上一章學習的數據雙向綁定的v-model指令的底層就是用到了事件,所以VUE專門提供了事件處理這種語法結構,其實本質上還是指令。所以我們稱之為事件綁定。之前我們學到了數據綁定,其實是類似的,數據綁定是將數據與模板綁定起來,只不過對于事件綁定來說,它綁定的是具體的操作。接下來我們學習下,VUE如何來處理事件。

          1、VUE如何處理事件

          • v-on指令用法
          <button v-on:click='count+=2'>點擊1</button>
          • v-on簡寫形式
          <button @click='count+=2'>點擊2</button>

          完整代碼:

          <!DOCTYPE html>
          <html lang="en">
          <body>
                  <div id="app">
                      <div>{{count}}</div>
                      <button v-on:click='count+=2'>點擊1</button>
                      <button @click='count+=2'>點擊2</button>
                  </div>
                  <script type="text/javascript" src="vue.js"></script>
                  <script type="text/javascript">
                      var vm = new Vue({
                          el:'#app',
                          data:{
                              count:0 
                          }
                      });
                  </script>
                </body>
          </html>


          展示效果圖:

          2、事件函數的調用方式

          以上我們調用事件是直接在指令內寫的業務邏輯,那么如果比較復雜的業務邏輯再直接寫到指令內那肯定是不合理了,這時我們要抽取函數,通過事件函數的方式來調用,VUE中也專門提供了一個屬性(methods)用來定義我們需要的方法。

          • 直接綁定函數名稱
          <button @click='todo'>點擊3</button>
          • 調用函數
          <button @click='todo()'>點擊4</button>

          完整代碼:

          <!DOCTYPE html>
          <html lang="en">
          <body>
                  <div id="app">
                      <div>{{count}}</div>
                      <button @click='todo'>點擊3</button>
                      <button @click='todo()'>點擊4</button>
                  </div>
                  <script type="text/javascript" src="vue.js"></script>
                  <script type="text/javascript">
                      var vm = new Vue({
                          el:'#app',
                          data:{
                              count:0 
                          },
                          methods:{
                              todo:function(){
                                  this.count+=2;
                              }
                          }
                      });
                  </script>
                </body>
          </html>

          展示效果:

          注意:在使用方法的時候,我們用到了this.count+,為什么用this呢,因為count在方法內部,在方法內部是沒辦法訪問這個屬性的,我們大可認為data和methods是vm實例下的2個子域,他們2個是沒辦法直接交互的,只能往上通過父域(vm)來訪問,所以這里的this就是vm實例對象,比如我在方法內部打印下console.log(this===vm) 返回的是true。

          methods內可以定義多個方法。

          3、事件函數參數傳遞

          如果我們的事件調用中不需要傳遞參數,那么以上第一種(直接綁定函數名稱)比較方便一些;

          如果我們的事件中需要傳遞參數,我們只能通過以上第二種(調用函數)的方式進行函數調用;

          當我們需要傳遞參數的時候,根據入參的分類可以分為普通參數和事件對象,下邊來看下事件函數如何來傳遞這2中類型的參數:

          • 參數傳遞
          <button @click='todo(11,22,$event)'>點擊</button>

          完整代碼:

          <!DOCTYPE html>
          <html lang="en">
          <body>
                  <div id="app">
                      <div>{{count}}</div>
                      <button @click='todo(11,22,$event)'>點擊</button>
                  </div>
                  <script type="text/javascript" src="vue.js"></script>
                  <script type="text/javascript">
                      var vm = new Vue({
                          el:'#app',
                          data:{
                              count:0 
                          },
                          methods:{
                              todo:function(p1,p2,event){
                                  console.log(p1);
                                  console.log(p2);
                                  console.log(event.target.tagName + " " + event.target.innerHTML);
                                  this.count+=2;
                              }
                          }
                      });
                  </script>
                </body>
          </html>

          展示效果圖:


          其實,我們通過第一種方式(直接綁定函數名稱)來調用函數的時候,是沒辦法從傳遞普通參數的,但是它默認綁定了事件對象。我們可以在方法內部直接獲取事件。

          <!DOCTYPE html>
          <html lang="en">
          <body>
                  <div id="app">
                      <div>{{count}}</div>
                      <button @click='todo'>點擊</button>
                  </div>
                  <script type="text/javascript" src="vue.js"></script>
                  <script type="text/javascript">
                      var vm = new Vue({
                          el:'#app',
                          data:{
                              count:0 
                          },
                          methods:{
                              todo:function(event){
                                  console.log(event.target.tagName + " " + event.target.innerHTML);
                                  this.count+=2;
                              }
                          }
                      });
                  </script>
                </body>
          </html>


          展示效果:


          總結:參數傳遞

          1、如果事件直接綁定的是函數名稱(直接綁定函數名稱 todo),那么默認會傳遞事件對象作為事件函數的第一個參數

          2、如果事件函數綁定的是函數調用(函數調用 todo()),那么事件對象必須作為最后一個參數顯示的傳遞,并且事件對象的名稱必須是$event

          4、事件修飾符

          下邊來看個例子:

          <!DOCTYPE html>
          <html lang="en">
          <body>
                  <div id="app">
                      <div>{{count}}</div>
                      <div @click='todo2'>
                          <button @click='todo'>點擊</button>
                      </div>
          
                  </div>
                  <script type="text/javascript" src="vue.js"></script>
                  <script type="text/javascript">
                      var vm = new Vue({
                          el:'#app',
                          data:{
                              count:0 
                          },
                          methods:{
                              todo:function(event){
                                  
                              },
                              todo2:function(event){
                                  console.log(event.target.tagName + " " + event.target.innerHTML);
                                  this.count+=2;
                              }
                          }
                      });
                  </script>
                </body>
          </html>

          展示效果:



          分析:在代碼中,button綁定的todo方法是沒有實現的,理論上是沒有反應的,但從展示效果來看,是執行了todo2方法,為什么呢?這是因為事件冒泡到了它的父級元素div上,所以才執行了todo2方法,這就叫做冒泡,一個從子元素向父元素傳遞事件的行為。那么這種情況顯然不是我們預想的,那怎么辦呢。阻止冒泡,有2種方式解決:

          第一種:原生js

          event.stopPropagation();

          第二種:vue提供的修飾符

          .stop 阻止冒泡

          <button @click.stop='todo'>點擊</button>

          完整代碼:

          <!DOCTYPE html>
          <html lang="en">
          <body>
                  <div id="app">
                      <div>{{count}}</div>
                      <div @click='todo2'>
                          <button @click.stop='todo'>點擊</button>
                      </div>
                  
                  </div>
                  <script type="text/javascript" src="vue.js"></script>
                  <script type="text/javascript">
                      var vm = new Vue({
                          el:'#app',
                          data:{
                              count:0 
                          },
                          methods:{
                              todo:function(event){
                                  console.log('111');
                                  //阻止冒泡
                                  //event.stopPropagation();
                              },
                              todo2:function(event){
                                  console.log(event.target.tagName + " " + event.target.innerHTML);
                                  this.count+=2;
                              }
                          }
                      });
                  </script>
                </body>
          </html>

          展示效果:


          .stop 的存在就相當于阻止事件向父元素傳遞,保證只執行todo

          • 阻止默認行為(取消默認事件)

          在實際開發中,有的時候,我們想要改變某些組件原生的動作,比如默認情況下,如果我點擊一個<a>標簽,那么默認會自動跳轉到href對應的鏈接上去。如果我想要阻止這些原生的動作行為,而是僅僅需要功能完成執行我們的function函數。那么這時候,我們就要使用prevent了,我們來舉一個例子看看:

          <!DOCTYPE html>
          <html lang="en">
          <body>
              <div id="app">
                   <a href="www.baidu.com" @click.prevent="func">百度</a>
              </div>
              <script type="text/javascript" src="vue.js"></script>
              <script type="text/javascript">
                  var vm = new Vue({
                      el:"#app",
                      data: {
                          count:0 
                      },
                      methods:{
                           func:function(){
                              alert('阻止a標簽原先點擊跳轉的默認行為。')
                           }
                      }
                  });
              </script>
                </body>
          </html>

          展示效果:


          除了以上經常用的2個以外,官網還提供了其它修飾符,有興趣的可以研究下使用場景


          5、按鍵修飾符

          在以往的頁面交互中,我們常常會遇到這種需求:當用戶輸入賬號密碼后點擊 Enter 鍵、一個多選篩選條件通過點擊多選框后自動加載符合選中條件的數據等等。在傳統的前端開發中,當我們碰到這種類似的需求時,我們往往需要知道 js 中需要監聽的按鍵所對應的 keyCode,然后通過判斷 keyCode 得知用戶是按下了那個按鍵,繼而執行后續的操作。例如,在下面的示例中,當我們松開 Enter 按鍵后控制臺就會打印出姓名輸入框內的值。

           <label>姓名:</label>
           <input id="name" type="text">
           
           $('#name').on('keyup',function(event){
               event.preventDefault();//阻止瀏覽器默認動作
               if(event.Code == 13){
                   console.log($(this).val());
               }
           });

          而在 Vue 中,給我們提供了一種便利的方式去實現監聽我們的按鍵事件。在監聽鍵盤事件時,我們經常需要查找常見的按鍵所對應的 keyCode,而 Vue 為最常用的按鍵提供了別名。


          在下面的代碼中,我們同樣監聽了 input 框的 Enter 事件,而我們只需要在綁定的 input 標簽的 keyup 事件上添加 .enter 修飾符即可。

          <!DOCTYPE html>
          <html lang="en">
          <body>
              <div id="app">
                    <label>姓名:</label>
                    <input id="name" type="text" v-model:value="name" @keyup.enter="log">
              </div>
              <script type="text/javascript" src="vue.js"></script>
              <script type="text/javascript">
                   var vm = new Vue({
                       el: '#app',
                       data: {
                           name: ''
                       },
                       methods: {
                           log:function() {
                               console.log(`name:${this.name}`);
                           }
                       }
                   })
              </script>
                </body>
          </html>

          展示效果:


          6、自定義按鍵

          對于標準的104鍵盤,Vue 不可能幫我們把所有的按鍵鍵值都定義好,這也不現實。于是,Vue 給我們提供了一種通過定義全局 config.keyCodes 來自定義按鍵修飾符的別名的方式。例如,在上面的例子中,我們是通過 Enter 按鍵獲取到輸入的文本框的值,現在,我們的需求變了,需要我們通過 F2 按鍵來獲得文本框的值,這時我們就可以通過自定義按鍵修飾符來實現操作。

          <!DOCTYPE html>
          <html lang="en">
          <body>
              <div id="app">
                    <label>姓名:</label>
                    <input id="name" type="text" v-model:value="name" @keyup.prevent.f2="logF2">
              </div>
              <script type="text/javascript" src="vue.js"></script>
              <script type="text/javascript">
                    //通過 keyCode 自定義按鍵修飾符
                    Vue.config.keyCodes.f2 = 113
                   var vm = new Vue({
                       el: '#app',
                       data: {
                           name: ''
                       },
                       methods: {
                           logF2:function() {
                              console.log(`name:${this.name} --- 通過 F2 按鍵獲得`);
                           }
                       }
                   })
              </script>
                </body>
          </html>

          這時,通過enter鍵已經不生效了,只有恩f2才能實現功能。

          規則:自定義按鍵修飾符名字是自定義的,但對應的值必須是按鍵對應event.keyCode值。

          上一篇:VUE入門教程(二)之模板語法(指令)

          件監聽是javascript中的一個重要概念。我將通過how do even turn dock實現事件監聽來分享這一技術。下面分別介紹每種事件的詳細操作。

          ·等夜視鼠標事件mouse down就是鼠標左鍵按下。

          ·鼠標逆時針抬起neck就是點擊一下db,肯尼克就是雙擊事件。

          ·mose over就是鼠標移到元素上,經過了核磁觸發。

          ·mouse move就是鼠標動一下就會出發。

          ·mouse out就是鼠標移出元素。

          ·mouse leave就是鼠標遠離開頁面。

          ·mouse enter是鼠標一代元素上。經過刺身的指元素抒發 contact the minute。

          ·鼠標右鍵打開菜單,在一個鍵盤世界投檔。

          ·就是按下鍵盤上某個鍵時觸發,也可以獲取到到底是按的哪個鍵。

          ·tf就是按下鍵抬起觸發。

          ·然后是ui 事件,比如加載事件還有鼠標滾動的事件。

          ·然后是手指事件也叫觸摸事件主要用于移動端用于手機觸摸屏幕。

          ·踏起時代就是觸發開始。

          ·踏起摁的就是觸發結束。

          ·踏起就是在滑動踏起。

          ·看守就是被系統阻止了滑動世界。比如在觸摸的過程中被彈出的彈出框打斷就會觸發開啟開鎖世界致表達世界。

          ·表達安居然要添加鳳元素作為監聽的對象,表達事件是用的比較多的。


          主站蜘蛛池模板: 亚洲一区无码中文字幕| 在线观看午夜亚洲一区| 国产精品无圣光一区二区| 人妻AV一区二区三区精品| 韩国精品福利一区二区三区| 亚洲香蕉久久一区二区| 欧美日韩精品一区二区在线视频| 人妖在线精品一区二区三区| 国产乱码精品一区二区三区四川| 国产精品污WWW一区二区三区| 亚洲一区在线视频观看| 国产一区二区三区美女| 亚洲AV无码一区二区三区人| 国产成人高清视频一区二区| 日韩免费一区二区三区在线 | 亚洲爆乳无码一区二区三区| 亚洲av成人一区二区三区在线播放 | 成人h动漫精品一区二区无码| 久久综合精品国产一区二区三区| 影院成人区精品一区二区婷婷丽春院影视| 在线精品亚洲一区二区三区| 亚洲第一区精品观看| 国产成人精品视频一区| 成人毛片一区二区| 亚洲精品无码一区二区| AA区一区二区三无码精片| 久久久久人妻一区二区三区vr | 亚洲一区二区三区成人网站 | 国产熟女一区二区三区四区五区| 一区二区三区在线观看中文字幕| 日本韩国黄色一区二区三区 | 无码国产伦一区二区三区视频 | 无码人妻精品一区二区三| 日本伊人精品一区二区三区| 亚洲va乱码一区二区三区| 亚洲av综合av一区二区三区| 亚洲av无码片vr一区二区三区| 免费在线视频一区| 人妻aⅴ无码一区二区三区| 少妇特黄A一区二区三区| 日韩福利视频一区|