浅谈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 相关文章推荐
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
Nov 27 Javascript
jQuery图片播放8款精美插件分享
Feb 17 Javascript
使用js声明数组,对象在jsp页面中(获得ajax得到json数据)
Nov 05 Javascript
JS常用函数和常用技巧小结
Oct 15 Javascript
AngularJS压缩JS技巧分析
Nov 08 Javascript
ionic开发中点击input时键盘自动弹出
Dec 23 Javascript
JS实现的验证身份证及获取地区功能示例
Jan 16 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
Jun 28 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
Oct 25 Javascript
vue.js配合$.post从后台获取数据简单demo分享
Aug 11 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
May 22 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
Aug 04 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
使用无限生命期Session的方法
2006/10/09 PHP
关于PHP堆栈与列队的学习
2013/06/21 PHP
PHP中session变量的销毁
2014/02/27 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
2014/11/19 PHP
如何利用http协议发布博客园博文评论
2015/08/03 PHP
PHP模拟asp.net的StringBuilder类实现方法
2015/08/08 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
jquery.artwl.thickbox.js  一个非常简单好用的jQuery弹出层插件
2012/03/01 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
Bootstrap每天必学之表格
2015/11/23 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
微信小程序实现文字跑马灯
2020/05/26 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
python插入排序算法实例分析
2015/07/03 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
python使用minimax算法实现五子棋
2019/07/29 Python
Pytorch实现的手写数字mnist识别功能完整示例
2019/12/13 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
家佳咖啡店创业计划书
2013/12/27 职场文书
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
大课间活动制度
2014/01/18 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
工作表扬信范文
2015/01/17 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书
2016感恩父亲节主题广播稿
2015/12/18 职场文书
初中物理教学反思
2016/02/19 职场文书