什么是组件 组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能。在有些情况下,组件也可以是原生 HTML 元素的形式,以 is 特性扩展。
使用组件 注册 注册一个全局组件,你可以使用 Vue.component(tagName, options)
运行结果:
局部注册 不必在全局注册每个组件。通过使用组件实例选项注册,可以使组件仅在另一个实例/组件的作用域中可用:
运行结果:
如果把 child-component 只能用example-2中,不能放到其他的div中,如果把放到其他的div中就会报错。
DOM 模板解析说明 当使用 DOM 作为模版时 (例如,将 el 选项挂载到一个已存在的元素上), 你会受到 HTML 的一些限制,因为 Vue 只有在浏览器解析和标准化 HTML 后才能获取模版内容。尤其像这些元素,,, 限制了能被它包裹的元素,而一些像
这样的元素只能出现在某些其它元素内部。 在自定义组件中使用这些受限制的元素时会导致一些问题,例如:
自定义组件 被认为是无效的内容,因此在渲染的时候会导致错误。变通的方案是使用特殊的 is 属性:
应当注意,如果您使用来自以下来源之一的字符串模板,这些限制将不适用:
由于这三个组件共享了同一个 data,因此增加一个 counter 会影响所有组件!这不对。我们可以通过为每个组件返回全新的 data 对象来解决这个问题:
data: function () {//return datareturn {counter: 0} }
现在每个 counter 都有它自己内部的状态了。
构成组件 在 Vue 中,父子组件的关系可以总结为 props down, events up。父组件通过 props 向下传递数据给子组件,子组件通过 events 给父组件发送消息。看看它们是怎么工作的。
Prop 使用prop传递数据 要让子组件使用父组件的数据,我们需要通过子组件的 props 选项。
运行结果:
hello world!
camelCase vs. kebab-case HTML 特性是不区分大小写的。所以,当使用的不是字符串模版,camelCased (驼峰式) 命名的 prop 需要转换为相对应的 kebab-case (短横线隔开式) 命名:
运行结果:
hello world message!
如果把child2中的 my-message 改为 myMessage,
错误提示:
动态 Prop 在模板中,要动态地绑定父组件的数据到子模板的 props,与绑定到任何普通的HTML特性相类似,就是用 v-bind。每当父组件的数据变化时,该变化也会传导给子组件
运行结果:
字面量语法 vs 动态语法
因为它是一个字面 prop,它的值是字符串 "1" 而不是 number。如果想传递一个实际的 number,需要使用 v-bind,从而让它的值被当作 Javascript 表达式计算:
单向数据流 prop 是单向绑定的:当父组件的属性变化时,将传导给子组件,但是不会反过来。这是为了防止子组件无意修改了父组件的状态——这会让应用的数据流难以理解。
Prop 验证 我们可以为组件的 props 指定验证规格。如果传入的数据不符合规格,Vue 会发出警告。当组件给其他人使用时,这很有用。 要指定验证规格,需要用对象的形式,而不能用字符串数组:
错误提示:
propA 类型是number,而我们传递给它的是个字符串,需要如下修改
// :prop-a 是 v-bind:prop-a的缩写
如果把prop-c去掉,格式如下
错误提示:
这是由于propC required: true 是必传的。
type 可以是下面原生构造器:
String
Number
Boolean
Function
Object
Array
Symbol
type 也可以是一个自定义构造器函数,使用 instanceof 检测。 当 prop 验证失败,Vue 会在抛出警告 (如果使用的是开发版本)。注意 props 会在组件实例创建之前进行校验,所以在 default 或 validator 函数里,诸如 data、computed 或 methods 等实例属性还无法使用。
非 Prop 属性 所谓非 prop 属性,就是它可以直接传入组件,而不需要定义相应的 prop。 明确给组件定义 prop 是传参的推荐方式,但组件的作者并不总能预见到组件被使用的场景。所以,组件可以接收任意传入的属性,这些属性都会被添加到组件的根元素上。 例如,第三方组件 bs-date-input,当它要和一个 Bootstrap 插件互操作时,需要在这个第三方组件的 input 上添加 data-3d-date-picker 属性,这时可以把属性直接添加到组件上 (不需要事先定义 prop):
添加属性 data-3d-date-picker="true" 之后,它会被自动添加到 bs-date-input 的根元素上
替换/覆盖现有的特性
运行结果:
对于多数特性来说,传递给组件的值会覆盖组件本身设定的值。即例如传递 type="large" 将会覆盖 type="date" 且有可能破坏该组件!索性我们对待 class 和 style 特性会更聪明一些,这两个特性的值都会做合并 (merge) 操作,让最终生成的值为:form-control date-picker-theme-dark。
源码: 源码下载 Vue组建(下篇)
社群品牌:从零到壹全栈部落 定位:寻找共好,共同学习,持续输出全栈技术社群 业界荣誉:IT界的逻辑思维 文化:输出是最好的学习方式 官方公众号:全栈部落 社群发起人:春哥(从零到壹创始人,交流微信:liyc1215) 技术交流社区:全栈部落BBS 全栈部落完整系列教程:全栈部落完整电子书学习笔记
关注全栈部落官方公众号,每晚十点接收系列原创技术推送
推荐阅读
在最近的学习过程中,我对Vue.js中的Prop属性有了更深入的理解,并认为这一知识点至关重要,因此在此记录一些心得体会。Prop属性用于在组件之间传递数据。由于每个组件实例的作用域都是独立的,无法直接引用父组件的数据。通过使用Prop,可以将数据从父组件安全地传递到子组件,确保数据的隔离性和可维护性。 ...
[详细]
蜡笔小新 2024-11-07 17:28:30
Vue 开发技巧:实现数据过滤与排序功能详解 ...
[详细]
蜡笔小新 2024-11-11 16:43:09
蜡笔小新 2024-11-11 14:58:09
本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ...
[详细]
蜡笔小新 2024-11-09 15:14:28
本文深入探讨了 Vue.js 中异步组件的应用与优化策略。首先,文章介绍了异步组件的基本概念及其在现代前端开发中的重要性。为了确保最佳实践,建议使用 Webpack 作为模块打包工具,因为 Browserify 默认不支持异步组件的加载。接着,详细解释了异步组件的使用方法,并提供了官方文档的相关链接以供参考。此外,文章还讨论了多种优化技巧,包括代码分割、懒加载和性能调优,以提升应用的整体性能和用户体验。 ...
[详细]
蜡笔小新 2024-10-31 16:52:55
在《深入解析 Vue.js 的设计与实现》第三章中,详细探讨了 Vue.js 渲染器与虚拟 DOM 的机制。通过 JavaScript 对象来模拟实际的 DOM 结构,例如,`const vNode = { tag: 'div', props: { ... } }`,这种方式不仅提高了性能,还增强了组件的可维护性和灵活性。本章进一步分析了虚拟 DOM 的创建、更新及优化策略,为开发者提供了深入了解 Vue.js 内核工作的视角。 ...
[详细]
蜡笔小新 2024-10-30 13:42:10
使用vue.js实现checkbox的全选,和多个的删除欢迎大家来我的博客浏览更多的干货内容www.jaxqin.comtemplate代码:<template> ...
[详细]
蜡笔小新 2024-10-20 17:06:58
Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ...
[详细]
蜡笔小新 2024-11-13 09:49:14
本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ...
[详细]
蜡笔小新 2024-11-12 13:35:26
0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ...
[详细]
蜡笔小新 2024-11-12 11:16:30
技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ...
[详细]
蜡笔小新 2024-11-11 15:24:24
在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ...
[详细]
蜡笔小新 2024-11-09 12:09:08
如何撰写初级和高级前端开发者的专业简历 ...
[详细]
蜡笔小新 2024-11-09 08:36:22
本文深入探讨了在 Vue 框架中利用 `$route.params` 进行参数传递的方法和技巧。通过详细解析 `$route.params` 的工作机制及其与 `$route.query` 的区别,帮助开发者更好地理解和应用这一功能。文章不仅涵盖了基本的使用方法,还提供了实际案例和最佳实践,以便读者能够灵活运用这些技术,提升开发效率和代码质量。 ...
[详细]
蜡笔小新 2024-10-31 17:59:47
### 一、指令概述指令是 Vue 中的一种特殊属性,用于增强 HTML 元素的功能。它们以 `v-` 开头,如 `v-cloak`。### 二、`v-cloak` 指令的应用`v-cloak` 指令主要用于解决页面加载过程中未编译的 Vue 插值表达式短暂显示的问题。在 Vue 实例编译完成之前,带有 `v-cloak` 的元素将被隐藏,从而避免了“闪动”现象。通过结合 CSS 样式,可以进一步优化用户体验,确保页面在初始加载时保持整洁和专业。 ...
[详细]
蜡笔小新 2024-10-24 19:28:12