vue组件Prop传递数据的实现示例


Posted in Javascript onAugust 17, 2017

组件实例的作用域是孤立的。这意味着不能(也不应该)在子组件的模板内直接引用父组件的数据。要让子组件使用父组件的数据,我们需要通过子组件的props选项。

prop 是单向绑定的:当父组件的属性变化时,将传导给子组件,但是不会反过来。这是为了防止子组件无意修改了父组件的状态。

每次父组件更新时,子组件的所有 prop 都会更新为最新值。这意味着你不应该在子组件内部改变 prop。

1、Prop静态传递数据

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
  <script type="text/javascript" src="vue.js"></script>

</head>
<body >
<div id="app">
  <!--静态传递数据-->
   <my-component message="hello" name="刘二狗" age="18"></my-component>
</div>
</body>

<script>
  Vue.component('my-component',{
    //子组件使用父组件的数据 message name age
    props:['message','name','age'],
    //用data选项对数据进行处理
    data:function(){
     return{
       message1: this.message +'用data选项对数据进行处理'
     }
    },
    //用计算属性选项对数据进行处理
    computed:{
      message2:function(){
        return this.message + '用计算属性选项对数据进行处理'
      }
    },
    template:'<div>' +
          '<span>{{message1}}</span><br>'+
          '<span>{{message2}}</span><br>'+
          '<span>{{message}} {{name}}今年{{age}}了</span><br>'+
         '</div>'
  })
  new Vue({
    el:'#app'
  })
</script>
</html>

输出结果:

vue组件Prop传递数据的实现示例

2、Prop动态传递数据

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
  <script type="text/javascript" src="vue.js"></script>
</head>
<body >
<div id="app">
    <input v-model="parentMsg"><br>
    <my-component :message="parentMsg"></my-component>
</div>
</body>

  <script>
    Vue.component('my-component',{
      props:['message'],
      data:function(){
        return{count:this.message+'刘三狗的嫉妒了'}
      },
      computed:{
        normalizedSize: function () {
          return this.message.trim().toLowerCase()
        }
      },
      template:'<div>' +
            '<span>{{message}}---{{normalizedSize}}</span><br>'+
            '<span>{{count}}</span>'+
           '</div>'
    })

    new Vue({
      el:'#app',
      data:{
        parentMsg:'哈哈哈'
      }
    })
</script>
</html>

输出结果:

vue组件Prop传递数据的实现示例

 3、Prop验证,我们可以为组件的 props 指定验证规格。如果传入的数据不符合规格,Vue 会发出警告。在前台的控制器中可以看到警告信息。

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
  <script type="text/javascript" src="vue.js"></script>
</head>
<body>
  <div id="app">
    <example :prop-d="message"></example>
  </div>
</body>

<script>
  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
        }
      }
    },
    template:'<span>{{propD}}</span>'
  })

  new Vue({
    el:'#app',
    data:{
      message:'propD验证只能传入数字类型'
    }
  })
</script>
</html>

控制台输出的警告信息:

vue组件Prop传递数据的实现示例

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

Javascript 相关文章推荐
js和php如何获取当前url的内容
Sep 22 Javascript
js抽奖实现随机抽奖代码效果
Dec 02 Javascript
PHP+mysql+Highcharts生成饼状图
May 04 Javascript
javascript 应用小技巧方法汇总
Jul 05 Javascript
javascript入门之数组[新手必看]
Nov 21 Javascript
easyui combogrid实现本地模糊搜索过滤多列
May 13 Javascript
原生JavaScript实现remove()和recover()功能示例
Jul 24 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
Sep 28 Javascript
iview同时验证多个表单问题总结
Sep 29 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
Sep 15 jQuery
解决ant Design中Select设置initialValue时的大坑
Oct 29 Javascript
TypeScript中条件类型精读与实践记录
Oct 05 Javascript
js实现随机点名小功能
Aug 17 #Javascript
浅谈Vuejs Prop基本用法
Aug 17 #Javascript
简单快速的实现js计算器功能
Aug 17 #Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
Aug 17 #jQuery
如何理解Vue的.sync修饰符的使用
Aug 17 #Javascript
浅谈JS中的反柯里化( uncurrying)
Aug 17 #Javascript
js编写简单的聊天室功能
Aug 17 #Javascript
You might like
在DC的漫画和电影中,蝙蝠侠的宿敌,小丑的真名是什么?
2020/04/09 欧美动漫
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
php 注释规范
2012/03/29 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
PHP使用CURL模拟登录的方法
2015/07/08 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
PHP实现微信小程序人脸识别刷脸登录功能
2018/05/24 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
2020/10/30 PHP
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
javascript 原型链维护和继承详解
2014/11/26 Javascript
原创jQuery弹出层插件分享
2015/04/02 Javascript
JavaScript实现图片DIV竖向滑动的方法
2015/04/25 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
使用impress.js制作幻灯片
2015/09/09 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
2016/11/04 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
Angular-Touch库用法示例
2016/12/22 Javascript
JS实现针对给定时间的倒计时功能示例
2017/04/11 Javascript
Angular4学习笔记之实现绑定和分包
2017/08/01 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
2020/06/10 Javascript
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
python中pika模块问题的深入探究
2018/10/13 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
python 将Excel转Word的示例
2021/03/02 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
广告学专业毕业生自荐信
2013/09/24 职场文书
Python使用海龟绘图实现贪吃蛇游戏
2021/06/18 Python
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL