最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue組件開發(fā)props驗證的實現(xiàn)

 更新時間:2019年02月12日 10:06:14   作者:安慕希  
這篇文章主要介紹了vue組件開發(fā)props驗證的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

使用props

在Vue中父組件向子組件中傳送數(shù)據(jù)是通過props實現(xiàn)的,一個簡單的使用props的例子:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Vue Study</title>
</head>
<body>
 
  <div id="app">
    <foo-component :foo-message="fooMessage"></foo-component> 
  </div>
 
<script type="text/javascript" src="lib/vue.js"></script>
<script type="text/javascript">
 
  var fooComponent = {
    props: ['fooMessage'],
    template: '<div> {{ fooMessage }} </div>'
  };
 
  var vm = new Vue({
    components: {
      'foo-component': fooComponent
    },
    el: '#app',
    data: {
      fooMessage: 123
    }
  });
 
</script>
</body>
</html>

為什么要有props驗證

但是上面這種方式是建立在大家都很遵守約定的情況下的,想象一下當有一個人要使用foo-component組件的時候,他可能對于其要接受的參數(shù)有什么要求并不是很清楚,因此傳入的參數(shù)可能會在開發(fā)子組件的人的意料之外,程序就會發(fā)生錯誤,就像我們在函數(shù)調用之前先檢查一下函數(shù)一樣,props也可以進行一個預先檢查。

平時調用函數(shù)的時候在函數(shù)開頭的地方都是一坨糊糊的參數(shù)檢查,這種寫法很不好了,所有后來就有了校驗器模式(別去百度了,我隨口取的名字),校驗器模式就是指把在函數(shù)開頭的對參數(shù)校驗的部分提取出來作為一個公共的部分來管理,讓一個什么東西來專門負責校驗,當類型不正確的時候就拋個異常根本不去調用這個函數(shù),很多框架設計時都是這么設計的(Spring MVC、Struts2等等),props也提供了這個功能,想一下如果沒有這個功能的話,為了保證正確性我們可能需要在每次使用props屬性之前都寫一坨代碼來檢查。校驗器最大的好處就是大多數(shù)情況下我們只需要聲明我需要什么樣的數(shù)據(jù),讓校驗器檢查好了再塞給我。

type

可以使用type來聲明這個參數(shù)可以接受的數(shù)據(jù)的類型,當檢查規(guī)則只有一個的時候type可以略寫:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Vue Study</title>
</head>
<body>
 
  <div id="app">
    <foo-component :foo-message="fooMessage"></foo-component> 
  </div>
 
<script type="text/javascript" src="lib/vue.js"></script>
<script type="text/javascript">
 
  var fooComponent = {
    props: {
      fooMessage: Number
    },
    template: '<div> {{ fooMessage }} </div>'
  };
 
  var vm = new Vue({
    components: {
      'foo-component': fooComponent
    },
    el: '#app',
    data: {
      fooMessage: 123
    }
  });
 
</script>
</body>
</html>

當傳入的參數(shù)類型不正確的時候Vue會發(fā)出提示:

type接受多個類型

當參數(shù)可以是多種類型的其中一個的時候,使用數(shù)組來表示。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Vue Study</title>
</head>
<body>
 
  <div id="app">
    <foo-component :foo-message="fooMessage"></foo-component> 
  </div>
 
<script type="text/javascript" src="lib/vue.js"></script>
<script type="text/javascript">
 
  var fooComponent = {
    props: {
      fooMessage: [Number, String]
    },
    template: '<div> {{ fooMessage }} </div>'
  };
 
  var vm = new Vue({
    components: {
      'foo-component': fooComponent
    },
    el: '#app',
    data: {
      fooMessage: 123
    }
  });
 
</script>
</body>
</html>

type能夠指定的類型

type可以是以下原生類型:

  • String
  • Number
  • Boolean
  • Function
  • Object
  • Array
  • Symbol

required

可以使用required選項來聲明這個參數(shù)是否必須傳入。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Vue Study</title>
</head>
<body>
 
  <div id="app">
    <foo-component :foo-message="fooMessage"></foo-component> 
  </div>
 
<script type="text/javascript" src="lib/vue.js"></script>
<script type="text/javascript">
 
  var fooComponent = {
    props: {
      fooMessage: {
        type: Number,
        required: true
      }
    },
    template: '<div> {{ fooMessage }} </div>'
  };
 
  var vm = new Vue({
    components: {
      'foo-component': fooComponent
    },
    el: '#app',
    data: {
      fooMessage: 256
    }
  });
 
</script>
</body>
</html>

當未傳入?yún)?shù)時:

default

使用default選項來指定當父組件未傳入?yún)?shù)時props變量的默認值:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Vue Study</title>
</head>
<body>
 
  <div id="app">
    <foo-component></foo-component>
  </div>
 
<script type="text/javascript" src="lib/vue.js"></script>
<script type="text/javascript">
 
  var fooComponent = {
    props: {
      fooMessage: {
        type: Number,
        default: 128
      }
    },
    template: '<div> {{ fooMessage }} </div>'
  };
 
  var vm = new Vue({
    components: {
      'foo-component': fooComponent
    },
    el: '#app',
    data: {
      fooMessage: 256
    }
  });
 
</script>
</body>
</html>

當父組件未傳入?yún)?shù)時子組件的值是128,當父組件傳入?yún)?shù)時是其指定的參數(shù),比如這里可以是256。

當type的類型為Array或者Object的時候default必須是一個函數(shù):

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Vue Study</title>
</head>
<body>
 
  <div id="app">
    <foo-component></foo-component>
  </div>
 
<script type="text/javascript" src="lib/vue.js"></script>
<script type="text/javascript">
 
  var fooComponent = {
    props: {
      fooMessage: {
        type: Array,
        default: function(){
          return ['foo', 'bar'];
        }
      }
    },
    template: '<div> {{ fooMessage }} </div>'
  };
 
  var vm = new Vue({
    components: {
      'foo-component': fooComponent
    },
    el: '#app',
    data: {
      fooMessage: ['f', 'o', 'o']
    }
  });
 
</script>
</body>
</html>

required && default ???

那么required和default是否能同時出現(xiàn)在一個props變量中呢?

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Vue Study</title>
</head>
<body>
 
  <div id="app">
    <foo-component></foo-component>
  </div>
 
<script type="text/javascript" src="lib/vue.js"></script>
<script type="text/javascript">
 
  var fooComponent = {
    props: {
      fooMessage: {
        type: Number,
        required: true,
        default: 128
      }
    },
    template: '<div> {{ fooMessage }} </div>'
  };
 
  var vm = new Vue({
    components: {
      'foo-component': fooComponent
    },
    el: '#app',
    data: {
      fooMessage: 256
    }
  });
 
</script>
</body>
</html>

渲染結果:

盡管控制臺上Vue報了錯誤,但是props變量fooMessage還是使用了設置的default值。

事情不會這么簡單,再測試一下其它的情況,比如當傳入的參數(shù)驗證不通過的時候:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Vue Study</title>
</head>
<body>
 
  <div id="app">
    <foo-component :foo-message="fooMessage"></foo-component> 
  </div>
 
<script type="text/javascript" src="lib/vue.js"></script>
<script type="text/javascript">
 
  var fooComponent = {
    props: {
      fooMessage: {
        type: Number
      }
    },
    template: '<div> {{ fooMessage }} </div>'
  };
 
  var vm = new Vue({
    components: {
      'foo-component': fooComponent
    },
    el: '#app',
    data: {
      fooMessage: 'foobar'
    }
  });
 
</script>
</body>
</html>

渲染結果:

fooMessage要求的類型是Number,傳入了一個String類型的,盡管在控制臺提示報了錯,但是仍然將其渲染了出來。

由此可以得出一個結論:Vue的props校驗只是提供一個參考,并不是強制性的。

validator

當校驗規(guī)則很復雜,默認提供的校驗規(guī)則無法滿足的時候可以使用自定義函數(shù)來校驗。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Vue Study</title>
</head>
<body>
 
  <div id="app">
    <foo-component :foo-message="fooMessage"></foo-component> 
  </div>
 
<script type="text/javascript" src="lib/vue.js"></script>
<script type="text/javascript">
 
  var fooComponent = {
    props: {
      fooMessage: {
        validator: function(value){
          return value>=0 && value<=128;
        }
      }
    },
    template: '<div> {{ fooMessage }} </div>'
  };
 
  var vm = new Vue({
    components: {
      'foo-component': fooComponent
    },
    el: '#app',
    data: {
      fooMessage: 100
    }
  });
 
</script>
</body>
</html>

一個綜合的例子

props: {
  // fooA只接受數(shù)值類型的參數(shù)
  fooA: Number,
  // fooB可以接受字符串和數(shù)值類型的參數(shù)
  fooB: [String, Number],
  // fooC可以接受字符串類型的參數(shù),并且這個參數(shù)必須傳入
  fooC: {
    type: String,
    required: true
  },
  // fooD接受數(shù)值類型的參數(shù),如果不傳入的話默認就是100
  fooD: {
    type: Number,
    default: 100
  },
  // fooE接受對象類型的參數(shù)
  fooE: {
    type: Object,
    // 當為對象類型設置默認值時必須使用函數(shù)返回
    default: function(){
      return { message: 'Hello, world' }
    }
  },
  // fooF使用一個自定義的驗證器
  fooF: {
    validator: function(value){
      return value>=0 && value<=100;
    }
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 超全面的vue.js使用總結

    超全面的vue.js使用總結

    Vue.js是當下很火的一個JavaScript MVVM庫,它是以數(shù)據(jù)驅動和組件化的思想構建的。相比于Angular.js,Vue.js提供了更加簡潔、更易于理解的API,使得我們能夠快速地上手并使用Vue.js。下面這篇文章主要給大家介紹了關于vue.js使用的相關總結,需要的朋友可以參考借鑒。
    2017-02-02
  • 基于vue展開收起動畫的示例代碼

    基于vue展開收起動畫的示例代碼

    這篇文章主要介紹了基于vue展開收起動畫的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Vue mockjs編寫假數(shù)據(jù)并請求獲取實現(xiàn)流程

    Vue mockjs編寫假數(shù)據(jù)并請求獲取實現(xiàn)流程

    這篇文章主要介紹了Vue mockjs編寫假數(shù)據(jù)并請求獲取實現(xiàn)流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-12-12
  • vue select選擇框數(shù)據(jù)變化監(jiān)聽方法

    vue select選擇框數(shù)據(jù)變化監(jiān)聽方法

    今天小編就為大家分享一篇vue select選擇框數(shù)據(jù)變化監(jiān)聽方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • vue使用docxtemplater導出word

    vue使用docxtemplater導出word

    docxtemplater?是一種郵件合并工具,以編程方式使用并處理條件、循環(huán),并且可以擴展以插入任何內容,下面我們來看看如何使用docxtemplater導出word吧
    2025-04-04
  • vue3.2最新語法使用socket.io實現(xiàn)即時通訊詳解

    vue3.2最新語法使用socket.io實現(xiàn)即時通訊詳解

    這篇文章主要為大家介紹了vue3.2最新語法使用socket.io實現(xiàn)即時通訊詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Vue開發(fā)實現(xiàn)吸頂效果的示例代碼

    Vue開發(fā)實現(xiàn)吸頂效果的示例代碼

    這篇文章主要介紹了Vue開發(fā)實現(xiàn)吸頂效果的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • vant實現(xiàn)購物車功能

    vant實現(xiàn)購物車功能

    這篇文章主要為大家詳細介紹了vant實現(xiàn)購物車功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 使用Vue.set()方法實現(xiàn)響應式修改數(shù)組數(shù)據(jù)步驟

    使用Vue.set()方法實現(xiàn)響應式修改數(shù)組數(shù)據(jù)步驟

    今天小編就為大家分享一篇使用Vue.set()方法實現(xiàn)響應式修改數(shù)組數(shù)據(jù)步驟,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Vue3?路由頁面切換動畫?animate.css效果

    Vue3?路由頁面切換動畫?animate.css效果

    這篇文章主要介紹了Vue3路由頁面切換動畫animate.css效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09

最新評論

扎囊县| 古丈县| 寿阳县| 嘉峪关市| 卢龙县| 池州市| 吉安市| 荆门市| 巴楚县| 文化| 建瓯市| 光泽县| 沭阳县| 襄垣县| 景东| 贵德县| 平定县| 策勒县| 达日县| 仙桃市| 平乐县| 佛冈县| 英德市| 武清区| 兴宁市| 阳江市| 藁城市| 茂名市| 阿荣旗| 桂林市| 平安县| 洞头县| 得荣县| 彩票| 巨野县| 吕梁市| 章丘市| 富源县| 新晃| 浦东新区| 华宁县|