vue——Props属性和Data属性概述

2023-11-08

利用Props可以进行组件之间数据传递(类似于React的Props)。


父组件向子组件传递数据

每一个组件都有作用域的限制,所以不可以在子组件内直接使用父组件的数据。

若要让子组件使用上父组件的数据,则必须通过子组件的Props选项。

静态Props

子组件要显式的使用props选项声明其所期待的数据:

在父组件之中,把数据传入:

<child message="hello"></child>

从而在子组件中,声明props来接受传入的数据:

Vue.component('child', {
	//声明了props
	props: ['message'],
	//就像data一样,prop也可以在模板之内使用
	//同样也可以在vm实例中类似“this.message“这样使用
	template: '<span>{{message}}</span>'
}
)

注意:在声明props和插入节点的时候,利用驼峰命名,在HTML中使用-进行连接。

  • props可以是数组或者对象,用来接受父组件传递的数据。
  • props可以是简单地数组。
  • props可以利用对象进行替代,对象允许配置高级选项,例如类型监测、自定义校验和设置默认的数值。

动态props

在父组件中,把数据通过v-bind:msg传入给子组件。

<template>
	<div id="post">
		<post-body :msg="msg"></post-body>
	</div>
</template>
<script>
import PostBody from './PostBody'
export default {
	name: 'post',
	data: () => ({
		msg: '哈哈'
	}),
	components: { PostBody }
}
</script>

在props中添加了元素之后,就不用再data中继续添加变量了,在子组件中,如何拿到传入的数据?
首先声明props,把得到的数据赋值给props,就可以直接渲染了。

<template>
	<div class="post-body">
		{{ msg }}
		//渲染到页面上
	</div>
 </template>
 <script>
 export default {
 	name: 'post-body',
 	props: ['msg']
 	// 声明 props
}
</script>

子组件向父组件传递了数据

子组件主要是通过事件传递数据给父组件。

子组件:
首先声明了一个方法setnum,然后使用$emit来遍历父组件传递过来的addnum事件,并且返回了字符串的数量:

<script>
 export default {
 	name: 'post-body',
 	methods: {
 		setnum: function () {
 			this.$emit('addnum', '数量:')
 		}
 	}
 }
 </script>

当按钮被点击的时候,会触发v-on:click事件,调用绑定的setnum方法,并且把数据传递给父组件。

 <template>
 	<div class="post-body">
 		<input type='button' value='+1' @click='setnum'/>
 	</div>
 </template>

父组件
在负组件中,利用addnum事件调用getnum方法,从而获取到子组件传递过来的参数string。

 <template>
 	<div id="post">
 		<p>{{ str }}{{ num }}</p>
 		<post-body @addnum='getnum'></post-body>
 	</div>
 </template>

getnum 方法中的参数 str 就是从子组件传递过来的参数 string。

<script>
import PostBody from './PostBody
export default {
	name: 'post',
	data: () => ({
		num: 0,
		str:
	}),
	methods: {
		getnum: function (str) {
			this.str = str
			this.num ++
		}
	},
	components: { PostBody }
</script>

这样点击子组件的+1按钮,就可以做到父组件的显示的数值改变,并且完成 +1 的操作。


子组件向子组件传递数据

Vue没有直接向子对子传参的方法,建议把需要传递数据的子组件,合并成为一个组件,若一定需要子对子传参,则可以先传到父组件,传到子组件。

为了便于开发,Vue推出了一个状态管理的工具,乘坐Vuex,可以方便实现组件之间的参数传递。


Data

每一个Vue实例都会带起其data对象里的所有属性,相当于React的State。

data
注意:data必须是函数,这里的data只是一个特殊的原始属性。

var data = { a: 1 }
var vm = new Vue({
	data: data
})
vm.a === data.a // -> true
// 设置属性也会影响到原始数据
vm.a = 2
data.a // -> 2
data.a = 3
vm.a // -> 3

注意只有这些被代理的属性是响应的,也就是说值的任何改变都是触发视图的重新渲染。如果在实例创 建之后添加新的属性到实例上,它不会触发视图更新。我们将在后面详细讨论响应系统。

除了data属性,Vue实例也暴露了一些有用的实例属性和方法,这些属性和方法都有前缀$,用来和代理的data属性做区分,例如:

var data = { a: 1 }Properties and Methods
var vm = new Vue({
	el: '#example',
	data: data
})
vm.$data === data // -> true
vm.$el === document.getElementById('example') // -> true
// $watch 是一个实例方法
vm.$watch('a', function (newVal, oldVal) {
	// 这个回调将在 `vm.a` 改变后调用
})

注意:不要在实例属性或者回调函数中使用箭头函数,因为箭头函数绑定父级上下文,所以this不会和预想的一样指向该vue实例

vm.$watch('a', newVal => this.myMethod())
// this.myMethod 会是一个 undefined

使用data

data 数据写在 vue 实例里面,类型是一个 Function

<script>
	export default {
		name: 'comment-box',
		data: () => ({
			comments: [
				{ text: 'hello git' },
				{ text: 'hello vuejs' }
			]
		})
	}
</script>

data选项/数据

data:

  • 类型:Object && Function
  • 限制:组件的定义只能够接受function
  • 详细
    • Vue实例的数据对象data已经使用了很多,数据绑定离不开data里面的数据,这也是vue的核心属性。
    • 这是Vue绑定数据到HTML标签的数据源泉,另外Vue框架会自动监视data里面的数据变化,自动更新数据到HTML标签上。

注意:因为箭头函数绑定了父级作用域的上下文,所以this指向不会指向到该Vue实例。

data: () => { return { a: this.myProp }}
// this.myProp 将会是 undefined

computed

把需要运算的data数据放在computed中,然后进行渲染。

  • 类型{ [key: string]: Function | { get: Function, set: Function } }
  • 详细: 计算属性将被混入到 Vue 实例中。所有 getter 和 setter 的 this 上下文自动地 绑定为 Vue 实例
export default {
	name: 'comment-box',
	data: () => ({
		comments: [
			{ text: 'hello git' },
			{ text: 'hello vuejs' }
		]
	}),
	computed: {
		reversedMessage: function () {
			return this.comments.slice().reverse()
		}
	}
}

计算属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。注意,如果实例范畴之外的依赖 (比如非响应式的 not reactive) 是不会触发计算属性更新的。


声明式渲染

vue的核心是一个允许采用简洁的模板语法来声明式的将数据渲染进DOM。

数据绑定最常见的形式就是使用 “Mustache” 语法(双大括号)的文本插值:

<template>
	<div class="comment-box">
		{{ comment.text }}
	</div>
</template>

Mustache 标签将会被替代为对应数据对象上 comment.text 属性的值。无论何时,绑定的数据对 象上 comment.text 属性发生了改变,插值处的内容都会更新


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue——Props属性和Data属性概述 的相关文章

随机推荐

  • c++中c_str()的用法详解

    转载地址 http blog csdn net u013682388 article details 39547773 cpp view plain copy 标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组
  • 前端开发弄懂了这些shell命令就足够了

    最新内容我会即时在github更新 建议在github阅读 1 set命令 set通过选项来开关shell的不同特性 每个特性都对应一个选项 每个特性都有两种配置方式 1 一种是通过 set e 和 set e 这种形式 即直接指定选项 2
  • 【web nodejs】node-sass离线方式安装

    前言 npm命令可以很方便的从npm库中安装依赖的类库 实际开发时 操作是非常简单的 但是如果网络不好或受限制的话 可以通过离线安装 一安装 1 查看服务器的node版本 把下面的脚本添加到package json scripts prei
  • chart.js使用学习

    chart js是用JavaScript编写的基于Canvas的开源图表库 其官网 文档及源码地址请见参考文献1 3 本文开始学习该图表库的使用方法 本文主要介绍chart js的安装及使用示例 安装 根据参考文献2 chart js有几种
  • SOJSONV5解密,SOJSON.V5解密方法,SOJSONV5解密分析

    首先 JS加密只要给浏览器能运行就是可逆的 只是难度和时间问题 如果一个加密他有规则 那么他就是可以系统化可逆 我们来分析下 sojson v5 sojsonv5解密 使用者较多 知名企业都在使用 证明这个加密工具还是值得信奈的 JS加密
  • mybatis——example文件形式——多表联查

    mybatis example文件形式 多表联查 并且每个表中都有同样的id不能识别问题解决 方法名称 orderListByStatus mapper xml文件中写法
  • 酷炫的python日志库-loguru

    Loguru是一个python的日志库 比logging更简单 好用 功能丰富 GitHub Delgan loguru Python logging made stupidly simple 安装 pip install loguru 特
  • asp.net2.0学习历程 菜鸟到中级程序员的飞跃

    asp net2 0学习历程 菜鸟到中级程序员的飞跃 如果你是一个菜鸟或者自认为初学者那么本文非常适合你 不能说这30本书就是最佳组合 但是可以说这个组合不差 本人曾博览群书 很多书重复 很多书讲的不适用 这些书都是目前书店可以买到的 达到
  • 创建Springboot+vue3项目

    项目概述 创建springboot项目 加入mybatis plus支持 1 加入依赖代码 2 创建数据库实例 3 yml文件的配置 4 编写测试代码 5 测试结果 创建vue项目 报错 错误一 错误二 错误三 项目概述 后端 Spring
  • javaweb知识点总结

    JavaWeb JDBC 简介 JDBC就是使用Java语言操作关系型数据库的一套API 快速入门 0 创建工程 导入驱动jar包 mysql connector java 5 1 48 jar 1 注册驱动 Class forName c
  • 贪吃蛇游戏(java)(全注释)

    没想到发的第一篇关于java的博客会是这个 写作业用来练手 顺道就搬上来了 代码肯定不最优的 欢迎大家一起来探讨 先搬个效果图 然后结构 一共分成4个部分 Define包下有蛇 食物和成绩数据的类 主要包括他们的初始化和像蛇的移动之类的东西
  • 决策树(Decision Tree)-机器学习ML

    参考 1 统计学习方法 李航 2 https baike baidu com item E5 86 B3 E7 AD 96 E6 A0 91 10377049 fr aladdin 3 http www jianshu com p 6eec
  • qt 手动设置控件的位置

    QT中的Layout用着很不错 但有时候你想指定控件绝对位置 用以下红色代码就可以了 chanel1 new QPushButton tr 通道1 chanel1 gt setGeometry rect x 200 rect y 10 10
  • HTTP协议与HTTPS协议的区别

    一 HTTP和HTTPS的基本概念 1 HTTP 是互联网上应用最为广泛的一种网络协议 是一个客户端和服务器端请求和应答的标准 TCP 用于从WWW服务器传输超文本到本地浏览器的传输协议 它可以使浏览器更加高效 使网络传输减少 2 HTTP
  • 在数组中寻找和为目标值的 N 项(算法)

    这类问题可以使用递归 动态规划 或者回溯的方式完成 下面我将使用递归来完成这个算法的实现 递归函数 用于在数组中寻找 n 项之和等于目标值的组合 function findNSum nums target n startIndex curr
  • Java代码块的基本使用

    概念 在Java中 使用 括起来的代码被称为代码块 局部代码块 位置 方法中定义 特点 执行完就会在内存中消失 作用 限定变量的生命周期 及早释放 提高内存利用率 public static void main String args in
  • Java导出zip压缩包

    使用Java导出zip压缩包 压缩包中包含一个文件夹和一个文件 其中文件夹包含另一个文件 代码 package com sunshuo start import java io File import java io FileOutputS
  • uboot启动第二阶段——C语言

    1 给全局变量gd分配内存 详情参考 uboot中重要的全局变量 gd 2 计算重定位的代码长度 armboot start word start monitor flash len bss start armboot start 要重定位
  • h5ai搭建自己的文件分享程序

    h5ai搭建自己的文件分享程序 最近使用网盘分享一些资料 但是却被删除 现在感觉还是放在自己的服务器上比较放心 今天就介绍下安装h5ai这个目录程序 他可以把对应目录下的文件和文件夹全部显示在web页面上 只需点击即可下载对应的资料 h5a
  • vue——Props属性和Data属性概述

    利用Props可以进行组件之间数据传递 类似于React的Props Props 父组件向子组件传递数据 动态props 子组件向父组件传递了数据 子组件向子组件传递数据 Data 使用data data选项 数据 computed 声明式