组件

基础介绍

参考:Vue 组件_哔哩哔哩

  • 组件本质上是可复用的Vue实例,所以在内部同样有data,methods等属性
  • 区别是:没有挂载的声明,不存在el这样的挂载选项;

template——定义挂载Dom,也可以理解为设置组件结构,最终被引入根实例

注意:template定义的结构只能有一个根元素(即所有的内容都包含在一个Dom元素里)

props——自定义组件的属性的数组,方便其他组件传值,类似接口的的形参,用来接收数据

data——组件里的data要封装在一个方法里,是因为要区分全局的变量的定义,确保组件定义的变量只能在组件内部调用

用途

  1. 用于封装页面的部分功能,将功能的结构、样式、逻辑代码封装成一个整体
  2. 提高功能的复用性、可维护性,更好专注业务逻辑

形式

通过组件名作为Html自定义标签名

		<div id="app">
<!--普通Html标签 -->
<span>普通Html标签</span>
<!-- 自定义组件标签-->
<my-com></my-com>
</div>

全局注册

  • 全局注册的组件在注册后可用于任意实例或组件里
  • 全局注册必须设置在根Vue实例创建之前

组件命名规则

定义有两种规则

  1. kebab-case: my-component
  2. 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>`
});

单向数据流

  1. 父子间组件的所有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>
  2. 如果子组件要更改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>
  3. 如果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(九)——组件(一)基础介绍、全局注册、单向数据流的更多相关文章

  1. 第七十一篇:Vue组件的私有和全局注册

    好家伙, 1.组件的父子关系 我们封装三个组件,分别为left组件,right组件和App组件 在封装时: 在封装时,彼此的关系是独立的,并不存在父子关系 在使用时: 在使用时,根据彼此的嵌套关系,形 ...

  2. Vue 组件的基础介绍

    1.组件定义 1.定义组件并引用 2.父组件向子组件传值 3.子组件向父组件传值 # 组件间传值:vuex (https://www.cnblogs.com/xiaonq/p/9697921.html ...

  3. 【Vue】组件的基础与组件间通信

    转载:https://segmentfault.com/a/1190000016409329 Vue.js 最核心的功能就是组件(Component),从组件的构建.注册到组件间通信,Vue .x 提 ...

  4. Vue.js-08:第八章 - 组件的基础知识

    一.前言 在之前的学习中,我们对于 Vue 的一些基础语法进行了简单的了解,通过之前的代码可以清晰的看出,我们在使用 Vue 的整个过程,最终都是在对 Vue 实例进行的一系列操作. 这里就会引出一个 ...

  5. vue.js原生组件化开发(一)——组件开发基础

    前言 vue作为一个轻量级前端框架,其核心就是组件化开发.我们一般常用的是用脚手架vue-cli来进行开发和管理,一个个组件即为一个个vue页面,这种叫单文件组件.我们在引用组件之时只需将组件页面引入 ...

  6. Vue组件使用基础

    这篇博文用来记录 .vue 组件的使用方法. 可以把组件代码按照 template.style.script 的拆分方式,放置到对应的 .vue 文件中. 模板(template).初始数据(data ...

  7. Vue 根组件,局部,全局组件 | 组件间通信,案例组件化

    一 组件 <div id="app"> <h1>{{ msg }}</h1> </div> <script src=" ...

  8. Vue中组件之间的通信方式

    vue是数据驱动视图更新的框架, 所以对于vue来说组件间的数据通信非常重要,那么组件之间如何进行数据通信的呢? 本文会介绍组件间通信的8种方式如下图所示, 并介绍在不同的场景下如何选择有效方式实现的 ...

  9. vue_全局注册过滤器

    在一个项目中, 某些过滤器全局都有可能用的到, 统一管理并自动化全局注册是很方便的. 代码如下, 后续只需要在src/filters/index.js中添加方法就可以全局使用过滤器了. // src/ ...

  10. 在vue中子组件修改props引发的对js深拷贝和浅拷贝的思考

    不管是react还是vue,父级组件与子组件的通信都是通过props来实现的,在vue中父组件的props遵循的是单向数据流,用官方的话说就是,父级的props的更新会向下流动到子组件中,反之则不行. ...

随机推荐

  1. PHP简介与开发环境搭建

    PHP简介与开发环境搭建 一.PHP简介 PHP,全称PHP: Hypertext Preprocessor(超文本预处理器),是一种广泛使用的开源服务器端脚本语言,尤其适合Web开发.PHP由Ras ...

  2. linux--安装wine模拟器,可用作安装Windows的exe程序

    sudo add-apt-repository ppa:ubuntu-wine/ppa sudo apt-get update sudo apt-get install wine1.7 安装完以后可以 ...

  3. 百万架构师第四十一课:RabbitMq:可靠性投递和实践经验|JavaGuide

    来源:https://javaguide.net RabbitMQ 2-可靠性投递与生产实践 可靠性投递 ​ 首先需要明确,效率与可靠性是无法兼得的,如果要保证每一个环节都成功,势必会对消息的收发效率 ...

  4. 交叉编译SQLite3

    交叉编译SQLite3 SQLite是一个进程内的库,实现了自给自足的.无服务器的.零配置的.事务性的SQL 数据库引擎. 它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置. ...

  5. MDK Debug时No target connected,STM32 ST-LINK Utility连接不上单片机的解决办法“Can not connect to target!”

    芯片下载程序成功,再次下载时出现,以下错误. 点击确认后,如下提示. 或提示如下. 不管怎么设置都侦测不到芯片. 使用STM32 ST-LINK Utility连接单片机时提示下边错误 "C ...

  6. 了解了这些你就是一位优秀的CTO

    spring cloud 分布式 Ngix协议层做阻断应射处理 SpringBoot 容器+MVC框架 SpringSecurity 认证和授权框架 MyBatis ORM框架 Swagger-UI ...

  7. FishSpeech应用篇——专属朗读人

    背景 FishSpeech部署教程参见:使用FishSpeech进行语音合成推理 - 天命小猪 - 博客园 部署好之后,就能够基于推理来定制自己专属朗读人.编程能力强的小伙伴可以结合AI定制一个自己的 ...

  8. Java中ArrayList的常见用法

    Java 中的 ArrayList 是一个非常常用的动态数组,它属于 Java 集合框架的一部分.与普通数组不同,ArrayList 可以在需要时动态调整其大小.以下是 ArrayList 的一些详细 ...

  9. 【Ryan】: linux下挂在共享文件夹

    点击查看代码 $ vmware-hgfsclient $ sudo vmhgfs-fuse .host:/ /mnt -o allow_other

  10. [tldr] vscode的remote插件的config文件内容解析

    参考VS Code Remote SSH配置 解决了什么问题 vscode的remote插件可以直接通过可视化的UI新建一个连接 通过ssh指令添加服务器的连接方式 但是这种方式添加的服务器名字等于服 ...