浅谈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 相关文章推荐
SyntaxHighlighter语法高亮插件使用说明
Aug 14 Javascript
javascript自适应宽度的瀑布流实现思路
Feb 20 Javascript
JQueryEasyUI datagrid框架的基本使用
Apr 08 Javascript
js 程序执行与顺序实现详解
May 13 Javascript
深入解析JavaScript中的变量作用域
Dec 06 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
Aug 06 Javascript
实例讲解jquery中mouseleave和mouseout的区别
Feb 17 Javascript
js实现(全选)多选按钮的方法【附实例】
Mar 30 Javascript
简单实现jQuery多选框功能
Jan 09 Javascript
jQuery使用jsonp实现百度搜索的示例代码
Jul 08 jQuery
JS前后端实现身份证号验证代码解析
Jul 23 Javascript
Vue组件简易模拟实现购物车
Dec 21 Vue.js
简单快速的实现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 MSSQL 存储过程的方法
2008/12/24 PHP
PHP统计二维数组元素个数的方法
2013/11/12 PHP
php二维数组转成字符串示例
2014/02/17 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
javascript 类方法定义还是有点区别
2009/04/15 Javascript
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
基于jQuery的message插件实现右下角弹出消息框
2011/01/11 Javascript
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
微信小程序 弹窗自定义实例代码
2017/03/08 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
用POSTMAN发送JSON格式的POST请求示例
2018/09/04 Javascript
新版小程序登录授权的方法
2018/12/12 Javascript
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
python Django框架实现自定义表单提交
2016/03/25 Python
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
Python采用Django制作简易的知乎日报API
2016/08/03 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
Python实现FLV视频拼接功能
2020/01/21 Python
关于css中margin的值和垂直外边距重叠问题
2020/10/27 HTML / CSS
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
办公室文秘自我鉴定
2013/09/21 职场文书
绝对经典成功的大学生推荐信
2013/11/08 职场文书
房地产员工找工作的自我评价
2013/11/15 职场文书
无工作经验者个人求职信范文
2013/12/22 职场文书
职工运动会感言
2014/02/07 职场文书
文员求职信
2014/07/15 职场文书
保护校园环境倡议书
2015/04/28 职场文书
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python