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 相关文章推荐
ExtJS 2.0 实用简明教程之布局概述
Apr 29 Javascript
jquery图片放大镜功能的实例代码
Mar 26 Javascript
浅析js中2个等号与3个等号的区别
Aug 06 Javascript
jquery事件preventDefault()方法用法实例
Jan 16 Javascript
JQuery中DOM加载与事件执行实例分析
Jun 13 Javascript
浅谈Jquery核心函数
Jun 18 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
Aug 07 Javascript
JS简单实现String转Date的方法
Mar 02 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
Jul 06 Javascript
webpack学习教程之publicPath路径问题详解
Jun 17 Javascript
js核心基础之闭包的应用实例分析
May 11 Javascript
原生JS实现微信通讯录
Jun 18 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 的异常处理程序
2014/06/22 PHP
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
php + WebUploader实现图片批量上传功能
2019/05/06 PHP
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
表单元素的submit()方法和onsubmit事件应用概述
2013/02/01 Javascript
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
JavaScript闭包详解
2015/02/02 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
微信小程序左右滑动的实现代码
2017/12/15 Javascript
javascript实现小型区块链功能
2019/04/03 Javascript
详解JS预解析原理
2020/06/16 Javascript
如何利用nodejs实现命令行游戏
2020/11/24 NodeJs
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
python找出一个列表中相同元素的多个索引实例
2019/06/11 Python
Django实现发送邮件找回密码功能
2019/08/12 Python
Python imageio读取视频并进行编解码详解
2019/12/10 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
python实现凯撒密码、凯撒加解密算法
2020/06/11 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty
2015/12/03 面试题
shell的种类有哪些
2015/04/15 面试题
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
工作表现评语
2014/01/19 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
北京青年观后感
2015/06/15 职场文书
Python编程编写完善的命令行工具
2021/09/15 Python
Golang bufio详细讲解
2022/04/21 Golang
vue项目如何打包之项目打包优化(让打包的js文件变小)
2022/04/30 Vue.js
基于docker安装zabbix的详细教程
2022/06/05 Servers