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里的prototype使用示例
Nov 19 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
Mar 21 Javascript
多种方法判断Javascript对象是否存在
Sep 22 Javascript
JavaScript数组常用操作技巧汇总
Nov 17 Javascript
javascript中去除数组重复元素的实现方法【实例】
Apr 12 Javascript
javascript 广告移动特效的实现代码
Jun 25 Javascript
Vue通过URL传参如何控制全局console.log的开关详解
Dec 07 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
Apr 10 Javascript
微信小程序自定义tabBar在uni-app的适配详解
Sep 30 Javascript
javascript解析json格式的数据方法详解
Aug 07 Javascript
vue制作toast组件npm包示例代码
Oct 29 Javascript
Vue时间轴 vue-light-timeline的用法说明
Oct 29 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/03/03 欧美动漫
Laravel学习笔记之Artisan命令生成自定义模板的方法
2018/11/22 PHP
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
JavaScript实现数字数组正序排列的方法
2015/04/06 Javascript
详解JavaScript异步编程中jQuery的promise对象的作用
2016/05/03 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
2018/03/05 Javascript
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
vue中keep-alive内置组件缓存的实例代码
2020/04/16 Javascript
深入理解Python中变量赋值的问题
2017/01/12 Python
使用C++扩展Python的功能详解
2018/01/12 Python
Python批量提取PDF文件中文本的脚本
2018/03/14 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
解决import tensorflow as tf 出错的原因
2020/04/16 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
python实现数字炸弹游戏
2020/07/17 Python
html5 canvas 使用示例
2010/10/22 HTML / CSS
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
Pottery Barn阿联酋:购买家具、家居装饰及更多
2019/12/08 全球购物
STP的判定过程
2012/10/01 面试题
酒店拾金不昧表扬信
2014/01/18 职场文书
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
校园绿化美化方案
2014/06/08 职场文书
见习报告格式要求
2014/11/04 职场文书
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js
Vue实现动态查询规则生成组件
2021/05/27 Vue.js