VueJS组件之间通过props交互及验证的方式


Posted in Javascript onSeptember 04, 2017

props 是父组件用来传递数据的一个自定义属性。父组件的数据需要通过 props 把数据传给子组件,子组件需要显式地用 props 选项声明 "prop"。

父组件通过props将数据传递给子组件

HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>
<script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<div id="app">
  <child message="hello world!">props传递给子组件</child>
</div>

<script>
// 
Vue.component('child', {
 // 声明 props
 props: ['message'],
 // 同样也可以在 vm 实例中像 “this.message” 这样使用
 template: '<h1>{{ message }}</h1>'
})
// 创建根实例
new Vue({
 el: '#app'
})
</script>
</body>
</html>

效果如图:

VueJS组件之间通过props交互及验证的方式

动态 props组建数据传递

类似于用 v-bind 绑定 HTML 特性到一个表达式,也可以用 v-bind 动态绑定 props 的值到父组件的数据中。每当父组件的数据变化时,该变化也会传导给子组件:

HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>
<script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<div id="app">
  <div>
   <input v-model="parentMsg">
   <br>
   <child v-bind:message="parentMsg"></child>
  </div>
</div>

<script>
// 注册
Vue.component('child', {
 // 声明 props
 props: ['message'],
 // 同样也可以在 vm 实例中像 “this.message” 这样使用
 template: '<span>{{ message }}</span>'
})
// 创建根实例
new Vue({
 el: '#app',
 data: {
  parentMsg: '父组件内容'
 }
})
</script>
</body>
</html>

效果如图:

VueJS组件之间通过props交互及验证的方式

 v-bind 指令将 todo 传到每一个重复的组件中

HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>
<script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<div id="app">
  <ol>
  <todo-item v-for="item in sites" v-bind:todo="item"></todo-item>
   </ol>
</div>

<script>
Vue.component('todo-item', {
 props: ['todo'],
 template: '<li>{{ todo.text }}</li>'
})
new Vue({
 el: '#app',
 data: {
  sites: [
   { text: 'Runoob' },
   { text: 'Google' },
   { text: 'Taobao' }
  ]
 }
})
</script>
</body>
</html>

效果如下:

VueJS组件之间通过props交互及验证的方式

注意: props 是单向绑定的:当父组件的属性变化时,将传导给子组件,但是不会反过来。 

组件为 props 指定验证要求

props 是一个对象而不是字符串数组时,它包含验证要求:

JS

Vue.component('example', {
 props: {
  // 基础类型检测 (`null` 意思是任何类型都可以)
  propA: Number,
  // 多种类型
  propB: [String, Number],
  // 必传且是字符串
  propC: {
   type: String,
   required: true
  },
  // 数字,有默认值
  propD: {
   type: Number,
   default: 100
  },
  // 数组/对象的默认值应当由一个工厂函数返回
  propE: {
   type: Object,
   default: function () {
    return { message: 'hello' }
   }
  },
  // 自定义验证函数
  propF: {
   validator: function (value) {
    return value > 10
   }
  }
 }
})

type 可以是下面原生构造器:

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

type 也可以是一个自定义构造器,使用 instanceof 检测。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript中全局对象的parseInt()方法使用介绍
Dec 19 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
Dec 03 Javascript
jquery实现树形菜单完整代码
Dec 29 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
Mar 08 Javascript
深入剖析javascript中的exec与match方法
May 18 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
Jun 20 Javascript
前端分页功能的实现以及原理(jQuery)
Jan 22 Javascript
JavaScript贪吃蛇小组件实例代码
Aug 20 Javascript
基于express中路由规则及获取请求参数的方法
Mar 12 Javascript
使用JavaScript生成罗马字符的实例代码
Jun 08 Javascript
深入理解Vue 的钩子函数
Sep 05 Javascript
vue实现购物车选择功能
Jan 10 Javascript
vue中component组件的props使用详解
Sep 04 #Javascript
React-Native中props具体使用详解
Sep 04 #Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
Sep 04 #Javascript
JS与HTML结合实现流程进度展示条思路详解
Sep 03 #Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
Sep 03 #Javascript
JS实现页面内跳转的简单代码
Sep 03 #Javascript
初探JavaScript 面向对象(推荐)
Sep 03 #Javascript
You might like
php 将bmp图片转为jpg等其他任意格式的图片
2009/06/29 PHP
Yii使用CLinkPager分页实例详解
2014/07/23 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
Vue2.0点击切换类名改变样式的方法
2018/08/22 Javascript
浅谈Fetch 数据交互方式
2018/12/20 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
基于原生js实现判断元素是否有指定class名
2020/07/11 Javascript
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
Python数据类型之Tuple元组实例详解
2019/05/08 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
2020/03/14 Python
python3中的logging记录日志实现过程及封装成类的操作
2020/05/12 Python
浅谈Python3中print函数的换行
2020/08/05 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
利用CSS3的3D效果制作正方体
2020/03/10 HTML / CSS
HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例
2016/02/28 HTML / CSS
荷兰包包购物网站:The Little Green Bag
2018/03/17 全球购物
香港现代设计家具品牌:Ziinlife Furniture
2018/11/13 全球购物
应届生骨科医生求职信
2013/10/31 职场文书
网页设计个人找工作求职信
2013/11/28 职场文书
师德师风建设方案
2014/05/08 职场文书
安全口号大全
2014/06/21 职场文书
小学班主任研修日志
2015/11/13 职场文书
高中班长竞选稿
2015/11/20 职场文书
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL