组件

基础介绍

参考: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. 提升质量:利用Coverage分析Python Web项目的测试覆盖

    提升质量:利用Coverage分析Python Web项目的测试覆盖 鉴于不同框架的运行机制各有差异,当利用Coverage工具对Python Web项目的测试覆盖率进行分析时,必须采取针对性的方法来 ...

  2. Luogu P11361 NOIP2024 编辑字符串 题解 [ 黄 ] [ 贪心 ]

    编辑字符串:这题能评蓝已经说明了洛谷的唐氏. 结论 找到两个字符串种连续的且可以移动的所有极大子区间,然后线性扫一遍,看这一位所处的子区间中有多少个 \(0\) 和 \(1\),两个都有 \(0\) ...

  3. FreeSql学习笔记——2.插入

    前言 由于还没有表结构,就先从新增开始,插入一些数据后才好做查询.修改.删除操作. 初始化 前面注入FreeSql时设置过自动同步表结构,那么就不用管数据库了,只需要在项目中定义实体,就会自动生成表结 ...

  4. .netCore 使用 Quartz 实例

    一.参考源文链接 1.https://www.likecs.com/show-897836.html 2.https://blog.csdn.net/weixin_43614067/article/d ...

  5. 【ABAQUS2023-Output Vars】使用记录

    计算结构的应变能,ALLSE=所有单元的ESEDEN*EVOL.但这不适用于模态分析,因为模态分析EVOL不能用 ALLSE Field: no History: yes .fil: automati ...

  6. go gin Next()方法

    示例 gin Next()使用方法 package main import ( "fmt" "github.com/gin-gonic/gin" "n ...

  7. crontab使用路径的问题

    crontab工具的一个大问题就是不能支持相对路径,会导致文件不能找到,在crontab启用脚本中加入cd指令,使得工作目录切换到运行工具所需的目录,即可 * 定时任务 每天凌晨0点执行 * 00 0 ...

  8. mysql-installer-community-8.0.19.0.msi 的自定义安装与卸载

    一.双击运行安装包执行安装 1.选择Custom,该种方式可以设置安装位置,仅安装所需的组件,点击Next 2.选择需要的组件,点击Advanced Options 3.设置安装位置,点击OK 4.点 ...

  9. delphi判断字符是否是汉字

    function IsHZ(ch: WideChar): boolean; var i: Integer; begin i := Ord(ch); if (i < 19968) or (i &g ...

  10. Windows Server评估版/正式版/数据中心版的来源及转换

    评估版: 从微软评估中心下载的版本,相当于微软提供的试用版,可免费使用一段时间.但该版本无法使用 KMS授权或 MAS 永久授权进行激活. 正式版/数据中心版: 从微软许可证中心下载的版本已标识了GL ...