vue组件属性(props)及私有数据data解析

目录
  • props
    • 1、组件Comp1.vue
    • 2、使用了Comp1的页面
    • 3、运行结果
  • data
  • 子组件中data和props的区别

vue组件中,props是公有属性,主要对外,相当于类里面的get、set方法操作的属性;data是私有数据,主要供组件内部访问。

vue作为一种前端开发框架,组件是其中的主角吧。其实任何一种前端框架,除了vue,还有react,组件都应该是主角。为啥呢,因为组件最能体现面向对象思想,单一职责,良好的封装性,高内聚,低耦合,利于复用和维护,提升开发效率,符合人类思维模式。。。好处多多。

所谓的前端,就是跑在浏览器一侧的代码。以前的前端代码,写的时候是什么样,最终运行的时候就是什么样,完全由浏览器解释运行,所以也叫静态页面。现在的前端开发框架完全不是这样,它类似于服务器端的开发模式,代码写好之后,需要编译、发布。这就为代码的组件化创造了条件。如果想完全用html,js这类纯原生的代码实现复用,是非常困难的。

比如js,引入js文件当然可以复用,但粒度比较粗的情况下,冗余量大,并且想在运行的时候各种参数传递,组合,提供动态生成效果,不是一般的困难,根本提供不了像asp.net,jsp这种有服务器加持,先由服务器解释,生成,再输出到浏览器端这种便利。

可以这么说,前端代码只有采用各种打包工具进行发布这种模式,或者有了react、vue等开发框架,才使得前后端分离真正落地。

扯远了。vue组件中,props代表公有属性,主要对外,可用于接收父组件或页面传递过来的参数;data则代表私有数据,组件内部使用,不推荐外部进行操作或读取。当然,你硬是要访问,应该也能访问得了。

props

1、组件Comp1.vue

<template>
  <div>
    {{info}}
  </div>
</template>
<script>
let _info = "加油!"
export default {
  props: {
    info: {
      default: _info
    }
  }
  /*
    写成 props: ['info'] 也可以,但没有默认值
   */
}
</script>

2、使用了Comp1的页面

<template>
  <div>
    <div>
      <Comp1 />
    </div>
    <div>
      <Comp1 info="要坚持!" />
    </div>
    <div>
      <Comp1 :info="ourInfo" />
    </div>
  </div>
</template>
<script>
import Comp1 from './Comp1.vue'
export default{
  components:{
    Comp1
  },
  data(){
    return {
      ourInfo:'别放弃!'
    }
  }
}
</script>

3、运行结果

data

<template>
  <div>
    <div>
      <Comp1 />
    </div>
    <div>
      <Comp1 info="要坚持!" />
    </div>
    <div>
      <Comp1 :info="ourInfo" />
    </div>
    <div>
      {{ourInfo2}}
    </div>
    <div>
      {{ourInfo3}}
    </div>
  </div>
</template>
<script>
import Comp1 from './Comp1.vue'
export default{
  components:{
    Comp1
  },
  data(){//Vue 在创建新组件实例的过程中调用此函数
    return {
      ourInfo:'别放弃!',
      ourInfo2:'尽人事,听天命!',
      ourInfo3:'尽人事,听天命!'
    }
  },
  mounted(){
    this.ourInfo3 = '只管努力去做,但求无愧于心'
  }
}
</script>

props由外部传入,通常通过attribute的方式传入,到了组件这里,一般不做修改;data则在组件内部自行操控。二者都对应数据,但有所区别。

子组件中data和props的区别

子组件中的data数据,不是通过父组件传递的是子组件私有的,是可读可写的。

子组件中的所有 props中的数据,都是通过父组件传递给子组件的,是只读的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Vue子组件props从父组件接收数据并存入data

    目录 1.不允许直接修改 2.存在异步的情况 解决思路 经过测试父组件中传递过来的数据有以下特点: 1.不允许直接修改 如果直接使用 this.xxx = action 操作的话 控制台会报下面这个错误 大概的意思是 你小子不要随便劈我瓜,我父组件的瓜岂是你能变的,父组件重新渲染时,这个值会被覆盖,你小子自个儿用计算属性或者data存一下吧 2.存在异步的情况 假如父组件该数据是后台接口获取的数据,那么会产生这种情况.子组件的生命周期都已经走完了,父组件的数据还没传过来.因为V8引擎的运行速度是

  • Vue父组件向子组件传值以及data和props的区别详解

    1.在父组件中定义 msg 属性 data:{ msg:'123 -我是父组件中的数据' }, 2.引用子组件 父组件可以在引用子组件的时候,通过属性绑定的形式,把需要传递给子组件的数据,以属性绑定的形式,传递到子组件内部,供子组件使用. 把父组件传递过来的 msg 属性,绑定到子组件的 parentmsg 属性上. <com1 :parentmsg="msg"></com1> 3. 在子组件定义部分,需要把父组件传递过来的 parentmsg 属性,先在pro

  • vue组件中props与data的结合使用方式

    目录 组件中props与data的结合使用 子组件中data从props中动态更新数据 组件中props与data的结合使用 如前所述(vue组件属性(props)及私有数据data),vue组件中,props是组件公有属性,对外:data是组件的私有数据,对内.正因为props对外,由外部赋值,因此在组件内部,是只读的,即组件内部不适宜去改变这些元素的值.当然,改也可以改,但运行时刻会有告警. 正如我们写一个函数,对于传入的参数,我们一般是只读对待的,极少会去修改它的值一样.当然,这只是一种编

  • 浅谈vue的props,data,computed变化对组件更新的影响

    本文介绍了vue的props,data,computed变化对组件更新的影响,分享给大家,废话不多说,直接上代码 /** this is Parent.vue */ <template> <div> <div>{{'parent data : ' + parentData}}</div> <div>{{'parent to children1 props : ' + parentToChildren1Props}}</div> <

  • vue组件属性(props)及私有数据data解析

    目录 props 1.组件Comp1.vue 2.使用了Comp1的页面 3.运行结果 data 子组件中data和props的区别 vue组件中,props是公有属性,主要对外,相当于类里面的get.set方法操作的属性:data是私有数据,主要供组件内部访问. vue作为一种前端开发框架,组件是其中的主角吧.其实任何一种前端框架,除了vue,还有react,组件都应该是主角.为啥呢,因为组件最能体现面向对象思想,单一职责,良好的封装性,高内聚,低耦合,利于复用和维护,提升开发效率,符合人类思

  • Vue组件选项props实例详解

    前面的话 组件接受的选项大部分与Vue实例一样,而选项props是组件中非常重要的一个选项.在 Vue 中,父子组件的关系可以总结为 props down, events up.父组件通过 props 向下传递数据给子组件,子组件通过 events 给父组件发送消息.本文将详细介绍Vue组件选项props 静态props 组件实例的作用域是孤立的.这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据.要让子组件使用父组件的数据,需要通过子组件的 props 选项 使用Prop传递数据

  • Vue组件传值过程中丢失数据的分析与解决方案

    前言 在上一篇文章 JavaScript 中的两种数据类型中,分别介绍了基本类型和引用类型,以及引用类型的浅拷贝与深拷贝.这里需要注意的是,该文章中深拷贝引用类型值的方法,并不是完美的,引用类型值中的某些属性值,仍不能完整地复制到新的变量中.比如函数值,在深拷贝过程中,就会丢失. 问题 在实际项目中,假如使用了二次封装的组件,并且封装的组件内部做了一些属性值的深拷贝操作,就有极有可能因为传入的属性值是引用类型的值,导致丢失部分数据. 举例 以基于 el-table 封装的 ak-table 组件

  • Vue 组件上的v-model双向绑定原理解析

    目录 组件上的v-model原理 v-model编译阶段 组件生成阶段 之前我们分析了Vue中v-model指令在普通表单元素上的使用原理(点击这里跳转),这一节我们继续分析v-model指令在组件上的原理. 组件上的v-model原理 v-model指令在组件上的编译过程的parse阶段与在表单元素上一样(可以参考),与普通表单元素不同之处在于genCode的阶段,在执行model函数生成代码的时候,会执行genComponentModel函数: v-model编译阶段 export defa

  • Vue组件间的通信pubsub-js实现步骤解析

    本文介绍使用发布订阅的方式进行vue组件间的通信 我认为这种方式比较自由, 不存在组件间的关系问题 1. 首先安装pubsub-js npm install --save pubsub-js 2. 订阅方组件 import PubSub from 'pubsub-js' mounted(){ // 执行异常代码 // 订阅消息 PubSub.subscribe('deleteTodo',(msg,index)=>{ this.deleteTodo(index) // 调用deleteTodo方法

  • vue组件开发props验证的实现

    使用props 在Vue中父组件向子组件中传送数据是通过props实现的,一个简单的使用props的例子: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Vue Study</title> </head> <body> <div id="app"> <foo-component :

  • Vue 组件修改根实例的数据的方法

    思路: 1 在组件内部监听事件并把事件 emit 2 在组件上监听 emit 出来的事件 3 当事件发生时执行对应的函数去修改根实例上的 data 实现: 1 在组件内部的 input框 中监听 input事件,并给 input事件 绑定triggerInput函数 2 当往 input框 中输入内容时,触发 triggerInput 函数 triggerInput函数 向外部 emit 一个 edit事件 和 输入框的值 3 在组件上监听这个 edit事件 并给 edit事件 绑定 trigg

  • Vue组件通信$attrs、$listeners实现原理解析

    前言 vue通信手段有很多种,props/emit.vuex.event bus.provide/inject 等.还有一种通信方式,那就是$attrs和$listeners,之前早就听说这两个api,趁着有空来补补.这种方式挺优雅,使用起来也不赖.下面例子都会通过父.子.孙子,三者的关系来说明使用方式. $attrs 官方解释: 包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class和style除外).当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定

  • 详细聊聊vue中组件的props属性

    目录 问题一:那props具体是怎么使用呢?原理又是什么呢?往下看 问题二:那如果我们想给年龄加1岁,怎么实现? 问题三:对于年龄这一类型,我们最希望拿到的是什么数据类型? 问题四:可以限制类型,那是不是也可以限制是否必传呢? 问题五:props接收的属性值可以修改吗? 问题六:必须要修改props属性值,怎么办? 总结:配置项props 总结 今天这篇文章,让你彻底学会props属性-- props主要用于组件的传值,他的工作就是为了接收外面传过来的数据,与data.el.ref是一个级别的配

随机推荐