zoukankan      html  css  js  c++  java
  • vue组件 Prop传递数据

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

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

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

    1、Prop静态传递数据

     1 <!DOCTYPE html>
     2 <html>
     3 <head lang="en">
     4     <meta charset="UTF-8">
     5     <title></title>
     6     <script type="text/javascript"  src="vue.js"></script>
     7 
     8 </head>
     9 <body >
    10 <div id="app">
    11     <!--静态传递数据-->
    12      <my-component message="hello" name="刘二狗" age="18"></my-component>
    13 </div>
    14 </body>
    15 
    16 <script>
    17     Vue.component('my-component',{
    18         //子组件使用父组件的数据 message  name  age
    19         props:['message','name','age'],
    20         //用data选项对数据进行处理
    21         data:function(){
    22           return{
    23               message1: this.message +'用data选项对数据进行处理'
    24           }
    25         },
    26         //用计算属性选项对数据进行处理
    27         computed:{
    28             message2:function(){
    29                 return this.message + '用计算属性选项对数据进行处理'
    30             }
    31         },
    32         template:'<div>' +
    33                     '<span>{{message1}}</span><br>'+
    34                     '<span>{{message2}}</span><br>'+
    35                     '<span>{{message}}  {{name}}今年{{age}}了</span><br>'+
    36                  '</div>'
    37     })
    38     new Vue({
    39         el:'#app'
    40     })
    41 </script>
    42 </html>

    输出结果:

    2、Prop动态传递数据

     1 <!DOCTYPE html>
     2 <html>
     3 <head lang="en">
     4     <meta charset="UTF-8">
     5     <title></title>
     6     <script type="text/javascript"  src="vue.js"></script>
     7 </head>
     8 <body >
     9 <div id="app">
    10         <input v-model="parentMsg"><br>
    11         <my-component :message="parentMsg"></my-component>
    12 </div>
    13 </body>
    14 
    15     <script>
    16        Vue.component('my-component',{
    17            props:['message'],
    18            data:function(){
    19                return{count:this.message+'刘三狗的嫉妒了'}
    20            },
    21            computed:{
    22                normalizedSize:  function () {
    23                    return this.message.trim().toLowerCase()
    24                }
    25            },
    26            template:'<div>' +
    27                         '<span>{{message}}---{{normalizedSize}}</span><br>'+
    28                         '<span>{{count}}</span>'+
    29                      '</div>'
    30        })
    31 
    32        new Vue({
    33            el:'#app',
    34            data:{
    35                parentMsg:'哈哈哈'
    36            }
    37        })
    38 </script>
    39 </html>

    输出结果:

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

     1 <!DOCTYPE html>
     2 <html>
     3 <head lang="en">
     4     <meta charset="UTF-8">
     5     <title></title>
     6     <script type="text/javascript"  src="vue.js"></script>
     7 </head>
     8 <body>
     9     <div id="app">
    10         <example :prop-d="message"></example>
    11     </div>
    12 </body>
    13 
    14 <script>
    15     Vue.component('example', {
    16         props: {
    17             // 基础类型检测 (`null` 意思是任何类型都可以)
    18             propA: Number,
    19             // 多种类型
    20             propB: [String, Number],
    21             // 必传且是字符串
    22             propC: {
    23                 type: String,
    24                 required: true
    25             },
    26             // 数字,有默认值
    27             propD: {
    28                 type: Number,
    29                 default: 100
    30             },
    31             // 数组/对象的默认值应当由一个工厂函数返回
    32             propE: {
    33                 type: Object,
    34                 default: function () {
    35                     return { message: 'hello' }
    36                 }
    37             },
    38             // 自定义验证函数
    39             propF: {
    40                 validator: function (value) {
    41                     return value > 10
    42                 }
    43             }
    44         },
    45         template:'<span>{{propD}}</span>'
    46     })
    47 
    48     new Vue({
    49         el:'#app',
    50         data:{
    51             message:'propD验证只能传入数字类型'
    52         }
    53     })
    54 </script>
    55 </html>

    控制台输出的警告信息:

      

  • 相关阅读:
    第四章 方法(4.2 方法的嵌套调用)
    C#利用for循环打印图形练习题
    第三章 C#程序结构 (3.3 循环结构)
    第六章 数组和索引器 (6.6 索引器)
    第五章 类与对象 5.2 猫类(案例二)
    第五章 类与对象 5.1 时间类(案例一)
    第三章 C#程序结构[3.2 选择结构的应用(Windows窗体应用程序)(四)]
    第三章 C#程序结构(3.1 顺序与选择结构)
    第二章 C#语法基础 (2.2 C#语言的运算符和表达式)
    第二章 C#语法基础(2.1C#语言的数据类型二)
  • 原文地址:https://www.cnblogs.com/dyfbk/p/6872475.html
Copyright © 2011-2022 走看看