Vue.js 组件基础
1.前言
- 本节讲述vue组件的基本格式以及实际开发的应用场景,本节内容兼容Vue2.x与Vue3.x
2.组件基础
- 组件的本质其实就是一个对象,这个对象包含多个属性,常见的属性有:template/data/methods/props/生命周期等
var some_component = {
'template':"<h3>{{name}}</h3>",
data:function(){
return {
name:'child'
}
},
props:{},
methods:{
},
computed:{
},
created(){
}
}
3.模板定义的替代品
- 通常情况下模版通过html字符串的形式复制给template属性,但是在js中拼接html字符串很不方便
- 内联模板:在子组件标签中添加inline-template属性,会使用标签内的html模版代替原来的模版,但是props参数依然要传入,内联模版无法直接读取父组件的数据
<my-component inline-template :propsA="valueA">
<div>
<p>{{propsA}}</p>
</div>
</my-component>
- X-Template:将html模版定义到script标签中,并通过id进行关联
<script type="text/x-template" id="hello-world-template">
<p>Hello hello hello</p>
</script>
Vue.component('hello-world', {
template: '#hello-world-template'
})
4.Vue 单文件组件 (SFC) 规范
- 实际开发中,用上面的写法来定义一个组件是不明智的,就拿template为例,需要拼接大量的html字符串,既不方便编写,也不便于维护
- 为了方便组件代码的封装复用,每一个组件对应一个vue文件,这个文件需要遵循 Vue 单文件组件 (SFC) 规范
- 每个 .vue 文件包含三种类型的顶级语言块 template、script 和 style,其中template负责HTML模板,script负责js脚本,style负责样式
- vue2.x只有一个根标签,vue3.x没有这个限制
<template>
<!-- vue2.x中只能有一个根标签 -->
<div>
<p>{{msg}}</p>
</div>
</template>
// lang表示所使用的CSS 预处理语言
// scoped表示里面的样式作用范围此局限在此组件中
<style lang="less" scoped>
p{
color:green
}
</style>
<script>
export default{
data(){
return{
msg:'hello wolrd'
}
},
methods:{
}
}
</script>
5.组件重载
- 在Vue中,如果你想要重载一个组件,你可以通过更改component的key属性来强制重新渲染组件
6.组件的混入
- Vue的混入功能支持将外部的数据或者逻辑注入到组件中,这些插入的数据或者逻辑会与组件本身的数据和逻辑进行合并
- 实际开发的用法为:将通用的数据或者方法进行封装,需要时进行引入并配置到组件中,这样的话即扩展了组件的功能,也减少组件本身的代码量,便于维护
- 在进行混入合并在过程中,有以下几个细节:
- 对于混入的生命周期钩子,混入对象的钩子将在组件自身钩子之前调用
- 对于data,methods,conputed,props,当他们的字段名产生冲突时,以组件本身的数据优先
<script>
//创建混入对象,用来给组件插入通用的数据或逻辑,包括data,props,methods,生命周期钩子等,这些插入的数据或者逻辑会与组件本身的数据和逻辑进行合并
//可以将通用的数据或者方法进行封装到单独某个文件中,需要时进行引入注册,从而减少代码量,便于维护
var mixin = {
data: function(){
return {
title:"混入的data数据"
}
},
created: function(){
console.log('我是混入的created钩子')
},
mounted:function(){
console.log('我是混入的mounted钩子')
},
methods:{
test(){
console.log('我是混入的方法')
}
}
}
var eChild = {
mixins: [mixin],
template:"<div>子组件1:{{typeof title == 'undefined'? '未定义title':title}}</div>",
data(){
return {
}
},
created(){
console.log('我是eChild的created')
},
mounted(){
console.log('我是eChild的mounted钩子')
},
}
var eChild2 = {
template:"<div>子组件2:{{typeof title == 'undefined'? '未定义title':title}}</div>",
data(){
return {
}
},
created(){
console.log('我是eChild2的created')
},
mounted(){
console.log('我是eChild2的mounted钩子')
},
}
var vm = new Vue({
el:"#app",
data(){
return {
}
},
components:{
eChild,eChild2
},
})
</script>
Vue.js 组件基础的更多相关文章
- vue.js组件化开发实践
前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然 ...
- VUE.JS组件化
VUE.JS组件化 前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎 ...
- Vue.js—组件快速入门以及实例应用
上次我们学习了Vue.js的基础,并且通过综合的小实例进一步的熟悉了Vue.js的基础应用.今天我们就继续讲讲Vue.js的组件,更加深入的了解Vue,js的使用.首先我们先了解一下什么是Vue.js ...
- 浅尝Vue.js组件(一)
本篇目录: 组件名 组件注册 全局注册 基础组件的自动化全局注册 局部注册 在模块系统中局部注册 Prop 单向数据流 Prop验证 类型检查 非Prop特性 替换/合并已有的特性 禁用特性继承 自定 ...
- Vue.js—组件快速入门及Vue路由实例应用
上次我们学习了Vue.js的基础,并且通过综合的小实例进一步的熟悉了Vue.js的基础应用.今天我们就继续讲讲Vue.js的组件,更加深入的了解Vue,js的使用.首先我们先了解一下什么是Vue.js ...
- Vue.JS学习基础
= 导航 顶部 vue.js介绍 vue.js实例 模板语法 计算属性 样式绑定 条件渲染 列表渲染 事件处理器 表单控件绑定 组件 顶部 vue.js介绍 vue.js实例 模板语法 计 ...
- Vue.js应用基础
声明 这篇博文是我的Vue学习记录,其中参杂了不少我个人的理解,由于我并没有继续学习Vue的源码,所以不能保证这些理解都是正确的.如果这篇博文有幸被你读到,请带着批判的心情去审视它. 如果你发现了其中 ...
- 如何理解vue.js组件的作用域是独立的
vue.js组件的作用域是独立,可以从以下三个方面理解: 1.父组件模板在父组件作用域内编译,父组件模板的数据用父组件内data数据:2.子组件模板在子组件作用域内编译,子组件模板的数据用子组件内da ...
- Vue.js 组件编码规范
本规范提供了一种统一的编码规范来编写 Vue.js 代码.这使得代码具有如下的特性: 其它开发者或是团队成员更容易阅读和理解. IDEs 更容易理解代码,从而提供高亮.格式化等辅助功能 更容易使用现有 ...
- Vue.js 组件的三个 API:prop、event、slot
组件的构成 一个再复杂的组件,都是由三部分组成的:prop.event.slot,它们构成了 Vue.js 组件的 API.如果你开发的是一个通用组件,那一定要事先设计好这三部分,因为组件一旦发布,后 ...
随机推荐
- Angular 18+ 高级教程 – 学以致用
前言 读这么多原理,到底为了什么?真实项目中真的会用得到吗? 你正在疑惑 "知识的力量" 吗? 本篇会给一个非常非常好的案例,让你感悟 -- 知识如何用于实战. 记住,我的目的是让 ...
- MyBatis——案例——查询-查询详情
查询-查询详情 (根据id获取商品全部信息(即商品对象)) 1.编写Mapper接口方法:Brand selectById(int id); 2.编写SQL ...
- softirq和hardirq中断亲和度
/proc/interrupts 和 /proc/softirqs 两者是相互关联的,但它们各自记录的信息和作用有所不同,反映了硬中断和软中断的两个处理阶段. 两者的关系: 硬中断引发软中断: 硬中断 ...
- 1.2 HELLO 三角形
这一节,我觉得是相当有难度的.渲染一个三角形,就需要介绍GLSL语言,图形渲染管线(Graphics Pipeline)以及着色器(Shader),标准化设备坐标(NDC)等诸多概念. 图形渲染管线和 ...
- 强化学习笔记之【SAC算法】
强化学习笔记之[SAC算法] 前言: 本文为强化学习笔记第四篇,第一篇讲的是Q-learning和DQN,第二篇DDPG,第三篇TD3 TD3比DDPG少了一个target_actor网络,其它地方有 ...
- ROS入门21讲(7)
十二.launch启动文件的使用方法 1.launch文件:通过XML文件实现多节点的配置和启动(可自动启动ROS Master) 2.Launch文件语法: <launch> <n ...
- 通义灵码:体验AI编程新技能-@workspace 和 @terminal为你的编程插上一双翅膀
1.前言 我是一位运维工程师,用通义灵码个人版的@workspace 和 @terminal 的能力做快速了解一个工程.查找工程内的实现逻辑,以及执行指令不知道如何写,或者不清楚某个指令的意思,对比之 ...
- 使用 FastGPT 实现最佳 AI 翻译工作流:全世界最信达雅的翻译
想让AI翻译既准确又地道?本文将教你如何利用 FastGPT 打造一个革命性的翻译工作流. 它不仅支持文本翻译,还能直接处理文档,更能通过自定义术语表确保专业术语的翻译准确性,堪称翻译神器! 直接看效 ...
- Flink window
窗口计算 我们经常需要在一个时间窗口维度上对数据进行聚合,窗口是流处理应用中经常需要解决的问题.Flink的窗口算子为我们提供了方便易用的API,我们可以将数据流切分成一个个窗口,对窗口内的数据进行处 ...
- 1000%增长!我仅用一个小时搞定!AI智能体+AI小程序=MVP王炸组合!
前言 在万圣节的前一晚上10月30日,一位运营朋友跟我说了个点子万圣节头像生成器,然后大概给我分析了下整体思路,于是我用扣子Coze平台(coze.cn)搭建了一个AI智能体整个过程花了一个小时就搞定 ...