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 相关文章推荐
借助script进行Http跨域请求:JSONP实现原理及代码
Mar 19 Javascript
javascript静态页面传值的三种方法分享
Nov 12 Javascript
xmlhttp缓存清除的2种解决方法
Dec 13 Javascript
JavaScript打印网页指定区域的例子
May 03 Javascript
js单词形式的运算符
May 06 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
Aug 18 Javascript
基于jquery实现图片放大功能
May 07 Javascript
javascript 广告移动特效的实现代码
Jun 25 Javascript
bootstrapValidator自定验证方法写法
Dec 01 Javascript
AngularJS实现controller控制器间共享数据的方法示例
Oct 30 Javascript
JS函数进阶之继承用法实例分析
Jan 15 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
Jul 28 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
小偷PHP+Html+缓存
2006/11/25 PHP
php二维数组转成字符串示例
2014/02/17 PHP
Codeigniter生成Excel文档的简单方法
2014/06/12 PHP
php中error与exception的区别及应用
2014/07/28 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
Linux安装配置php环境的方法
2016/01/14 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
JavaScript中关于indexOf的使用方法与问题小结
2010/08/05 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
查询json的数据结构的8种方式简介
2014/03/10 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
JS关闭窗口时产生的事件及用法示例
2016/08/20 Javascript
深入理解Node.js的HTTP模块
2016/10/12 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
微信小程序开发之Tabbar实例详解
2017/01/09 Javascript
详解webpack模块化管理和打包工具
2018/04/21 Javascript
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
如何通过Proxy实现JSBridge模块化封装
2020/10/22 Javascript
[02:54]辉夜杯主赛事第二日败者组 iG.V赛后采访
2015/12/26 DOTA
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
django站点管理详解
2017/12/12 Python
Python实现批量执行同目录下的py文件方法
2019/01/11 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
python实现坦克大战游戏 附详细注释
2020/03/27 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
杭州-飞时达软件有限公司.net笔面试
2012/04/28 面试题
教育系毕业生中文求职信范文
2013/10/06 职场文书
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
中学教师岗位职责
2013/11/26 职场文书
青年文明号服务承诺
2014/03/31 职场文书
企业工会工作总结2015
2015/05/13 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
红色经典电影观后感
2015/06/18 职场文书