Vue(九)——组件(一)基础介绍、全局注册、单向数据流
组件
基础介绍
参考:Vue 组件_哔哩哔哩
- 组件本质上是可复用的
Vue实例,所以在内部同样有data,methods等属性 - 区别是:没有挂载的声明,不存在el这样的挂载选项;
template——定义挂载Dom,也可以理解为设置组件结构,最终被引入根实例
注意:template定义的结构只能有一个根元素(即所有的内容都包含在一个Dom元素里)
props——自定义组件的属性的数组,方便其他组件传值,类似接口的的形参,用来接收数据
data——组件里的data要封装在一个方法里,是因为要区分全局的变量的定义,确保组件定义的变量只能在组件内部调用
用途
- 用于封装页面的部分功能,将功能的结构、样式、逻辑代码封装成一个整体
- 提高功能的复用性、可维护性,更好专注业务逻辑
形式
通过组件名作为Html自定义标签名
<div id="app">
<!--普通Html标签 -->
<span>普通Html标签</span>
<!-- 自定义组件标签-->
<my-com></my-com>
</div>
全局注册
- 全局注册的组件在注册后可用于任意实例或组件里
- 全局注册必须设置在根
Vue实例创建之前
组件命名规则
定义有两种规则
- kebab-case:
my-component - PascalCase:
MyComponent
Vue.component('MyCom',{/*选项对象*/});
Vue.component('my—com',{/*选项对象*/});
应用规则
在Dom里只能采用kebab-case: ' my-component'
<my-com :vk="msg"></my-com>
Demo:
<div id="app">
<!--普通Html标签 -->
<span>普通Html标签</span>
<!-- 自定义组件 -->
<my-com></my-com>
</div>
Vue.component('MyCom',{
template:`<div><p>这里是结构最简单的组件</p></div>`
});
单向数据流
父子间组件的所有prop都是单向下行绑定的。包含两层含义
- 传值只能父组件向子组件传值
- 子组件的变化不能反向影响父组件的数据
父组件向子组件传值Demo
<div id="app">
<!-- 3.给组件自定义属性vk传值-->
<!-- 注意:这里的value必须是定义在组件父级元素里的 -->
<my-com :val="msg"></my-com>
</div>
<script type="text/javascript">
// 全局组件必须声明在Vue实例创建之前
<!-- 声明方式1 -->
Vue.component('MyCom',{
//1.为组件声明一个属性val
props:['val'],
//2.将组件里的属性val值赋给template里Dom元素的属性
template:`<input type="text" :value="val"></input>`
});
new Vue({
el:"#app",
data:{
msg:"Hello Word"
}
})
</script>
如果子组件要更改prop参数接收到的数据,应当存储在data中后操作
<div id="app">
<my-com :val="msg"></my-com>
</div>
<script type="text/javascript">
Vue.component('MyCom',{
props:['val'],
template:`<div>
{{title}}
<button @click="fn">按钮</button>
</div>`,
data:function(){
return{
//1.将prop属性val存储在data中的title中
title:this.val
}
},
methods:{
fn(){
//2.存储完再更改储存的值title,不要直接修改this.val = "Hello Vue"会报错
this.title = "Hello Vue"
}
}
});
new Vue({
el:"#app",
data:{
msg:"Hello Word"
}
})
</script>
如果prop为对象或者数组时,子组件操作会影响父组件的状态。
因为当prop为对象或者数组时,传递的是对象或者数组的引用,所以父子组件操作的引用指向的是同一对象或数组,任一一方改变都会真实改变这个对象或者数组的值
<div id="app">
{{student.sname}}:{{student.age}}
<my-com
:val="msg"
:stu="student"
></my-com>
</div>
<script type="text/javascript">
Vue.component('MyCom',{
props:['val','stu'],
template:`<div>
{{title}}
<button @click="fn">按钮</button>
{{st.sname}}:{{st.age}}
</div>`,
data:function(){
return{
//1.将prop属性val存储在data中的title中
title:this.val,
st:this.stu
}
},
methods:{
fn(){
//2.存储完再更改储存的值title,不要直接修改this.val = "Hello Vue"会报错
this.title = "Hello Vue";
this.st.sname = "Hanmeimei";
this.st.age = 19;
}
}
});
new Vue({
el:"#app",
data:{
msg:"Hello Word",
student:{
sname:"Lilei",
age:18
}
}
})
</script>
效果图:

Vue(九)——组件(一)基础介绍、全局注册、单向数据流的更多相关文章
- 第七十一篇:Vue组件的私有和全局注册
好家伙, 1.组件的父子关系 我们封装三个组件,分别为left组件,right组件和App组件 在封装时: 在封装时,彼此的关系是独立的,并不存在父子关系 在使用时: 在使用时,根据彼此的嵌套关系,形 ...
- Vue 组件的基础介绍
1.组件定义 1.定义组件并引用 2.父组件向子组件传值 3.子组件向父组件传值 # 组件间传值:vuex (https://www.cnblogs.com/xiaonq/p/9697921.html ...
- 【Vue】组件的基础与组件间通信
转载:https://segmentfault.com/a/1190000016409329 Vue.js 最核心的功能就是组件(Component),从组件的构建.注册到组件间通信,Vue .x 提 ...
- Vue.js-08:第八章 - 组件的基础知识
一.前言 在之前的学习中,我们对于 Vue 的一些基础语法进行了简单的了解,通过之前的代码可以清晰的看出,我们在使用 Vue 的整个过程,最终都是在对 Vue 实例进行的一系列操作. 这里就会引出一个 ...
- vue.js原生组件化开发(一)——组件开发基础
前言 vue作为一个轻量级前端框架,其核心就是组件化开发.我们一般常用的是用脚手架vue-cli来进行开发和管理,一个个组件即为一个个vue页面,这种叫单文件组件.我们在引用组件之时只需将组件页面引入 ...
- Vue组件使用基础
这篇博文用来记录 .vue 组件的使用方法. 可以把组件代码按照 template.style.script 的拆分方式,放置到对应的 .vue 文件中. 模板(template).初始数据(data ...
- Vue 根组件,局部,全局组件 | 组件间通信,案例组件化
一 组件 <div id="app"> <h1>{{ msg }}</h1> </div> <script src=" ...
- Vue中组件之间的通信方式
vue是数据驱动视图更新的框架, 所以对于vue来说组件间的数据通信非常重要,那么组件之间如何进行数据通信的呢? 本文会介绍组件间通信的8种方式如下图所示, 并介绍在不同的场景下如何选择有效方式实现的 ...
- vue_全局注册过滤器
在一个项目中, 某些过滤器全局都有可能用的到, 统一管理并自动化全局注册是很方便的. 代码如下, 后续只需要在src/filters/index.js中添加方法就可以全局使用过滤器了. // src/ ...
- 在vue中子组件修改props引发的对js深拷贝和浅拷贝的思考
不管是react还是vue,父级组件与子组件的通信都是通过props来实现的,在vue中父组件的props遵循的是单向数据流,用官方的话说就是,父级的props的更新会向下流动到子组件中,反之则不行. ...
随机推荐
- PHP简介与开发环境搭建
PHP简介与开发环境搭建 一.PHP简介 PHP,全称PHP: Hypertext Preprocessor(超文本预处理器),是一种广泛使用的开源服务器端脚本语言,尤其适合Web开发.PHP由Ras ...
- linux--安装wine模拟器,可用作安装Windows的exe程序
sudo add-apt-repository ppa:ubuntu-wine/ppa sudo apt-get update sudo apt-get install wine1.7 安装完以后可以 ...
- 百万架构师第四十一课:RabbitMq:可靠性投递和实践经验|JavaGuide
来源:https://javaguide.net RabbitMQ 2-可靠性投递与生产实践 可靠性投递 首先需要明确,效率与可靠性是无法兼得的,如果要保证每一个环节都成功,势必会对消息的收发效率 ...
- 交叉编译SQLite3
交叉编译SQLite3 SQLite是一个进程内的库,实现了自给自足的.无服务器的.零配置的.事务性的SQL 数据库引擎. 它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置. ...
- MDK Debug时No target connected,STM32 ST-LINK Utility连接不上单片机的解决办法“Can not connect to target!”
芯片下载程序成功,再次下载时出现,以下错误. 点击确认后,如下提示. 或提示如下. 不管怎么设置都侦测不到芯片. 使用STM32 ST-LINK Utility连接单片机时提示下边错误 "C ...
- 了解了这些你就是一位优秀的CTO
spring cloud 分布式 Ngix协议层做阻断应射处理 SpringBoot 容器+MVC框架 SpringSecurity 认证和授权框架 MyBatis ORM框架 Swagger-UI ...
- FishSpeech应用篇——专属朗读人
背景 FishSpeech部署教程参见:使用FishSpeech进行语音合成推理 - 天命小猪 - 博客园 部署好之后,就能够基于推理来定制自己专属朗读人.编程能力强的小伙伴可以结合AI定制一个自己的 ...
- Java中ArrayList的常见用法
Java 中的 ArrayList 是一个非常常用的动态数组,它属于 Java 集合框架的一部分.与普通数组不同,ArrayList 可以在需要时动态调整其大小.以下是 ArrayList 的一些详细 ...
- 【Ryan】: linux下挂在共享文件夹
点击查看代码 $ vmware-hgfsclient $ sudo vmhgfs-fuse .host:/ /mnt -o allow_other
- [tldr] vscode的remote插件的config文件内容解析
参考VS Code Remote SSH配置 解决了什么问题 vscode的remote插件可以直接通过可视化的UI新建一个连接 通过ssh指令添加服务器的连接方式 但是这种方式添加的服务器名字等于服 ...