浅谈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 相关文章推荐
认识延迟时间为0的setTimeout
May 16 Javascript
改变javascript函数内部this指针指向的三种方法
Apr 23 Javascript
JavaScript加强之自定义event事件
Sep 21 Javascript
javascript遍历控件实例详细解析
Jan 10 Javascript
json中换行符的处理方法示例介绍
Jun 10 Javascript
动态加载js的方法汇总
Feb 13 Javascript
高性能JavaScript 重排与重绘(2)
Aug 11 Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
Mar 14 Javascript
angular 基于ng-messages的表单验证实例
May 04 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
Jan 16 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
Jun 19 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
May 10 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
vBulletin HACK----关于排版的两个HACK
2006/10/09 PHP
php include和require的区别深入解析
2013/06/17 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
纯js代码实现简单计算器
2015/12/02 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
prototype与__proto__区别详细介绍
2017/01/09 Javascript
js 动态生成html 触发事件传参字符转义的实例
2017/02/14 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
vue嵌套路由与404重定向实现方法分析
2018/05/04 Javascript
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
JS随机密码生成算法
2019/09/23 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
python动态加载变量示例分享
2014/02/17 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
汽修专业学生自我鉴定
2013/11/16 职场文书
民族团结先进个人材料
2014/02/05 职场文书
银行贷款承诺书
2014/03/29 职场文书
大一新生期末自我评价
2014/09/12 职场文书
教师四风问题整改措施
2014/09/25 职场文书
学习型家庭事迹材料
2014/12/20 职场文书
最新农村养殖致富:资金投入较低的创业项目有哪些?
2019/09/26 职场文书
javascript条件式访问属性和箭头函数介绍
2021/11/17 Javascript
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang
mysql 体系结构和存储引擎介绍
2022/05/06 MySQL
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python