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 相关文章推荐
再谈ie和firefox下的document.all属性
Oct 21 Javascript
Javascript调用C#代码
Jan 17 Javascript
jQuery新的事件绑定机制on()示例应用
Jul 18 Javascript
node.js中的http.response.writeHead方法使用说明
Dec 14 Javascript
使用window.prompt()实现弹出用户输入的对话框
Apr 13 Javascript
jquery基础知识第一讲之认识jquery
Mar 17 Javascript
浅谈js中的引用和复制(传值和传址)
Sep 18 Javascript
基于Axios 常用的请求方法别名(详解)
Mar 13 Javascript
微信小程序发布新版本时自动提示用户更新的方法
Jun 07 Javascript
Vue-cli3多页面配置详解
Mar 22 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
Jul 17 Javascript
使用Ajax实现进度条的绘制
Apr 07 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线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
基于php socket(fsockopen)的应用实例分析
2013/06/02 PHP
php在linux下检测mysql同步状态的方法
2015/01/15 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
给网站上的广告“加速”显示的方法
2007/04/08 Javascript
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
javascript生成json数据简单示例分享
2014/02/14 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
理解Angular数据双向绑定
2016/01/10 Javascript
BootStrap selectpicker
2016/06/20 Javascript
Jquery组件easyUi实现选项卡切换示例
2016/08/23 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
详谈JavaScript的闭包及应用
2017/01/17 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
element-ui中按需引入的实现
2019/12/25 Javascript
js实现微信聊天效果
2020/08/09 Javascript
vue+Element-ui前端实现分页效果
2020/11/15 Javascript
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
关于Python数据结构中字典的心得
2017/12/04 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
python2与python3爬虫中get与post对比解析
2019/09/18 Python
python pygame实现挡板弹球游戏
2019/11/25 Python
Python如何执行精确的浮点数运算
2020/07/31 Python
维也纳通行证:Vienna PASS
2019/07/18 全球购物
网络安全类面试题
2015/08/01 面试题
开业庆典邀请函
2014/01/08 职场文书
2014年大班元旦活动方案
2014/02/26 职场文书
安全生产演讲稿
2014/05/09 职场文书
驾驶员安全责任书
2014/07/22 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
教师调动申请报告
2015/05/18 职场文书
党支部半年考察意见
2015/06/01 职场文书
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技