浅谈Vuejs Prop基本用法


Posted in Javascript onAugust 17, 2017

这两天学习了Vuejs Prop感觉这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记。

一、使用Prop传递数据

组件实例的作用域是孤立的。这意味着不能并且不应该在子组件的模板内直接引用父组件的数据。可以使用props把数据传给子组件。

prop是父组件用来传递数据的一个自定义属性。子组件需要显示的地用props选项声明”prop”

Vue.component('child',{
  props:['message'],
  template:'<span>{{ message }}</span>'
})

然后向它传入一个普通字符串:

<child message="hello!"></child>

结果:

hello!

二、camelCase vs.kebab-case

html不区分大小写。当使用非字符串模板时,prop的名字形式会从camelCase转为kebab-case(短横线隔开):

//camelCase
Vue.component('child',{
  props:['myMessage'],
  template:'<span>{{ message }}</span>'
})
//kebab-case
<child my-message="hello!"></child>

再次说明,如果你是用字符串模板,不用在意这些限制。

三、动态Prop

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

<div>
  <input v-model="parrentMsg">
  <br>
  <child v-bind:my-message="parrentMsg"></child>
</div>

使用v-bind的缩写语法通常更简单:

<child :my-message="parrentMsg"></child>

四、字面量语法vs动态语法

因为它是一个字面prop ,它的值以字符串 "1" 而不是以实际的数字传下去。如果想传递一个实际的 JavaScript 数字,需要使用 v-bind ,从而让它的值被当作 javascript 表达式计算:

五、单项数据流

prop是单项绑定的:当父组件的属性变化时,将传导给子组件,但是不会反过来。这是为了防止子组件无意修改了父组件的状态——这会让应用的数据流难以理解。同时,这也很好理解,父组件是子组件的高度抽象,表示子组件的共有部分,一个组件的数据改变并不会改变其抽象,然而其抽象的改变却代表着所有子组件的改变。

另外,每次组渐渐更新时,子组件的所有prop都会更新为最新值。这意味着你不应该在子组件内部改变prop。如果你这么做了,Vue会在控制台给出警告。

通常有两种改变prop的情况:

1.prop作为初始值传入,子组件之后只是将它的初始值作为本地数据的初始值使用;

2.prop作为需要被转变的原始值传入。

更确切地说这两种情况是:
a.定义一个局部data属性,并将prop的初始值作为局部数据的初始值。

“` 
props: [‘initialCounter'], 
data: function () { 
return { counter: this.initialCounter} 
}

b.定义一个 computed 属性,此属性从 prop 的值计算得出。

```
  props: ['size'],
  computed: {
    normalizedSize: function () {
     return this.size.trim().toLowerCase()
   }
  }

六、Prop验证

组件可以为 props 指定验证要求。如果未指定验证要求,Vue 会发出警告。当组件给其他人使用时这很有用。
prop 是一个对象而不是字符串数组时,它包含验证要求:

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检测。当prop验证失败了,如果使用的是开发版本会抛出一条警告。

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

Javascript 相关文章推荐
greybox——不开新窗口看新的网页
Feb 20 Javascript
原来Jquery.load的方法可以一直load下去
Mar 28 Javascript
关于JavaScript与HTML的交互事件
Apr 12 Javascript
jquery简单的拖动效果实现原理及示例
Jul 26 Javascript
用原生JS获取CLASS对象(很简单实用)
Oct 15 Javascript
jQuery中removeProp()方法用法实例
Jan 05 Javascript
HTML5实现留言和回复页面样式
Jul 22 Javascript
JavaScript中数组的合并以及排序实现示例
Oct 24 Javascript
JavaScript实现点击按钮字体放大、缩小
Feb 29 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
Dec 18 Javascript
vant中的toast层级改变操作
Nov 04 Javascript
typescript编写微信小程序创建项目的方法
Jan 29 Javascript
简单快速的实现js计算器功能
Aug 17 #Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
Aug 17 #jQuery
如何理解Vue的.sync修饰符的使用
Aug 17 #Javascript
浅谈JS中的反柯里化( uncurrying)
Aug 17 #Javascript
js编写简单的聊天室功能
Aug 17 #Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
Aug 17 #Javascript
Canvas放置反弹效果随机图形(实例)
Aug 17 #Javascript
You might like
php+mysql实现无限级分类 | 树型显示分类关系
2006/11/19 PHP
php in_array 函数使用说明与in_array需要注意的地方说明
2010/04/13 PHP
PHP程序开发范例学习之表单 获取文本框的值
2011/08/08 PHP
php实现文件下载(支持中文文名)
2013/12/04 PHP
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
js验证表单第二部分
2006/11/25 Javascript
use jscript Create a SQL Server database
2007/06/16 Javascript
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
JavaScript学习笔记之获取当前目录的实现代码
2010/12/14 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
2016/12/15 Javascript
VueJs组件prop验证简单介绍
2017/09/12 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
浅谈Vue.use的使用
2018/08/29 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
2019/12/30 Javascript
JS document form表单元素操作完整示例
2020/01/13 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
2020/07/17 Javascript
基于jquery实现彩色投票进度条代码解析
2020/08/26 jQuery
python使用json序列化datetime类型实例解析
2018/02/11 Python
详解python-图像处理(映射变换)
2019/03/22 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
Python 带星号(* 或 **)的函数参数详解
2021/02/23 Python
大学生写自荐信的技巧
2014/01/08 职场文书
离婚被告答辩状
2015/05/22 职场文书
高二数学教学反思
2016/02/18 职场文书
Python中22个万用公式的小结
2021/07/21 Python
详解redis在微服务领域的贡献
2021/10/16 Redis