VUE2中文文档:组件基础篇

组件基础

组件(component),是具有 name 名称的可复用 Vue 实例:当前示例中是 <button-counter>。我们可以使用 new Vue 创建出一个 Vue 根实例,然后将这个组件作为其中的一个自定义元素(custom element)。

由于组件是可复用的 Vue 实例,它们接收的选项,和在 new Vue 时候的选项相同,例如 datacomputedwatchmethods 和生命周期钩子。唯一的例外是,类似 el 这样,根实例上特有(root-specific)的选项。

data 必须是一个函数

组件的 data 选项必须是一个函数,以便每个实例都可以维护「函数返回的数据对象」的彼此独立的数据副本,

如果 Vue 没有遵循这个规定,点击其中一个按钮,会影响其他所有用到此 data 的组件实例

组件注册有两种方式:全局注册和局部注册。

全局方式注册的组件,可以用于之后创建的所有(通过 new Vue 创建的)Vue 根实例,以及 Vue 实例组件树中所有子组件的内部。

使用 props 向子组件传递数据

new Vue({
  el: ‘#blog-post-demo‘,
  data: {
    posts: [
      { id: 1, title: ‘我的 Vue 旅程‘ },
      { id: 2, title: ‘用 Vue 写博客‘ },
      { id: 3, title: ‘Vue 如此有趣‘ },
    ]
  }
})

<blog-post
  v-for="post in posts"
  v-bind:key="post.id"
  v-bind:title="post.title"
></blog-post>
Vue.component(‘blog-post‘, {
  props: [‘title‘],
  template: ‘<h3>{{ title }}</h3>‘
})

使用 events 向父组件发送消息

new Vue({
  el: ‘#blog-posts-events-demo‘,
  data: {
    posts: [/* ... */],
    postFontSize: 1                          //定义一个对象用作字体大小
  }
})

<div id="blog-posts-events-demo">
  <div :style="{ fontSize: postFontSize + ‘em‘ }">        //将style属性动态的绑定起来,一旦数据传入可以及时更新
    <blog-post
      v-for="post in posts"
      v-bind:key="post.id"
      v-bind:post="post"
      v-on:enlarge-text="postFontSize += 0.1"            //监听enlarge-text事件,触发则执行。
    ></blog-post>
  </div>
</div>
Vue.component(‘blog-post‘, {
  props: [‘post‘],
  template: `
    <div class="blog-post">
      <h3>{{ post.title }}</h3>
      <button v-on:click="$emit(‘enlarge-text‘)>          //添加点击事件,并且将此事件返回给父组件的enlarge-text事件
        放大文本
      </button>
      <div v-html="post.content"></div>
    </div>
  `
})

在 event 事件中发送一个值

有时,想在 event 事件中发送一个特定的值。例如,我们可能想要在 <blog-post> 组件自身内部,去控制放大文本字号的间隔。在这种情况下,我们可以使用 $emit 的第二个参数来提供字号间隔值:

<button v-on:click="$emit(‘enlarge-text‘, 0.1)">
  放大文本
</button>

<blog-post
  ...
  v-on:enlarge-text="postFontSize += $event"               //此时$event就是传入的值0.1
></blog-post>

或者,如果事件处理函数是一个方法:

<blog-post
  ...
  v-on:enlarge-text="onEnlargeText"
></blog-post>

methods: {
  onEnlargeText: function (enlargeAmount) {              //此时$event传入的值会作为方法的第一个参数,这里是enlargeAmount
    this.postFontSize += enlargeAmount
  }
}

在组件中使用 v-model

自定义事件(custom event),还可以用来创建出「实现 v-model 机制的自定义输入框(custom input)」

<input v-model="searchText">

等同于如下:                             //完全意义上的等同  

<input
  v-bind:value="searchText"                   //绑定value和searchText的值(即随着searchText实时更新value)
  v-on:input="searchText = $event.target.value"        //将value值赋值给searchText
>                                   //以上便实现了searchText和value的双向绑定    

而用于一个组件时,也是如此。

为了组件内部能够有效运行,组件内的 <input> 必须:

  • 将 value 属性绑定到 value prop
  • 在 input 输入框中,在自定义的 input 事件中,发送一个新的值

这里就是上面所描述的:

Vue.component(‘custom-input‘, {
  props: [‘value‘],                                 //2.接受父组件传递的value值
  template: `
    <input
      v-bind:value="value"                             //3.将收到的value赋值给input框的value
      v-on:input="$emit(‘input‘, $event.target.value)             //4.监听input,并向父组件返回名为input的事件以及当前DOM的value
    >
  `
})

<custom-input
  v-bind:value="searchText"                           //1.将searchText绑定到value
  v-on:input="searchText = $event"                          //5.接受子组件触发input,将子组件传递的value赋值给searchText
></custom-input>                                        //以上五点即有效实现了子组件和父组件完全复刻,也就是说v-modle在父组件也可以用了

所以,父组件用更简洁的形式替代如下。
<custom-input v-model="searchText"></custom-input>
 

使用 slots 进行内容分发

通过 Vue 的 <slot> 自定义元素,可以非常简单的实现这个任务:

Vue.component(‘alert-box‘, {
  template: `
    <div class="demo-alert-box">
      <strong>Error!</strong>
      <slot></slot>
    </div>
  `
})

<alert-box>
  发生一些错误。
</alert-box>

会被渲染为如下结果:

动态组件

通过向 Vue 的 <component> 元素传入 is 特性,

<!-- Component changes when currentTabComponent changes -->
<component v-bind:is="currentTabComponent"></component>

通过改变:is的值就可以改变组件的选择。                          //话说这难道不是vue-router?

DOM 模板解析注意事项

有些 HTML 元素,例如 <ul><ol><table> 和 <select> 这些元素,会对于出现在其内部的元素有所限制;而另一些 HTML 元素,例如 <li><tr> 和 <option> 这些元素,只可以出现在前面那些元素的内部。

由于这种 HTML 运行机制,在这些受限制的元素内部使用组件,会导致一些问题。

自定义组件 <blog-post-row> 会被当作无效内容,提升到 table 元素之外,从而导致最终渲染输出后的错误。幸运的是,is 特性提供了一种解决方案:

<table>
  <tr is="blog-post-row"></tr>
</table>

应当注意,在使用以下字符串模板之一的场景中,这些限制将不再适用

原文地址:https://www.cnblogs.com/FunkyEric/p/8967636.html

时间: 2024-10-27 12:12:32

VUE2中文文档:组件基础篇的相关文章

VUE2中文文档:进入、离开和列表过度

进入.离开和列表的过渡 概述 当从 DOM 中插入.更新或移除项目时,Vue 提供多种应用过渡效果的方式.包括以下工具: 在 CSS 过渡和动画中自动处理 class 可以配合使用第三方 CSS 动画库,如 Animate.css 在过渡钩子函数中使用 JavaScript 直接操作 DOM 可以配合使用第三方 JavaScript 动画库,如 Velocity.js 单元素/组件的过渡 Vue 提供了 transition 外层包裹容器组件(wrapper component),可以给下列情形

【Chromium中文文档】Profile架构(看看谷歌家的重构)

进程模型 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Profile_Architecture.html 全书地址 Chromium中文文档 for https://www.chromium.org/developers/design-documents 持续更新ing,欢迎star gitbook地址:https://ahangchen.gitbooks.io/ch

SSH中文文档

SSH中文文档 SSH 一项创建在应用层和传输层基础上的安全协议,用于替代安全性差的TELNET,加密安全登陆用. SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用SSH协议可以有效防止远程管理过程中的信息泄露问题.通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗. SSH之另一项优点为其传输的数据可以是经过压缩的,所以可以加快传输的速度.SSH有很多功能,它既可以代替Telnet,又可以为FTP.POP.甚至为PPP提供一个安全的"通道"

Flutter 中文文档网站 flutter.cn 正式发布!

在通常的对 Flutter 介绍中,最耳熟能详的是下面四个特点: 精美 (Beautiful):充分的赋予和发挥设计师的创造力和想象力,让你真正掌控屏幕上的每一个像素. ** 极速 (Fast)**:基于 Skia 的硬件加速图形引擎,帮助你媲美原生应用的速度. 高效 (Productive):Flutter 的 Stateful Hot Reload (热重载) 特性帮助你实时看到应用修改的结果. 开放 (Open):不管是 Flutter 引擎还是 Dart 开发语言,甚至是工程团队的工作空

Apache Storm 1.1.0 中文文档 | ApacheCN

前言  Apache Storm 是一个免费的,开源的,分布式的实时计算系统. 官方文档: http://storm.apache.org 中文文档: http://storm.apachecn.org ApacheCN 最近组织了翻译 Storm 1.1.0 中文文档 的活动,整体 翻译进度 为 96%. 感谢大家参与到该活动中来 感谢无私奉献的 贡献者,才有了这份 Storm 1.1.0 中文文档 感谢一路有你的陪伴,我们才可以做的更好,走的更快,走的更远,我们一直在努力 ... 网页地址:

Hadoop-2.2.0中文文档——MapReduce 下一代 -——集群配置

目的 这份文档描写叙述了怎样安装.配置和管理从几个节点到有数千个节点的Hadoop集群. 玩的话,你可能想先在单机上安装.(看单节点配置). 准备 从Apache镜像上下载一个Hadoop的稳定版本号. 安装 安装一个Hadoop集群,一般包含分发软件到全部集群中的机器上或者是安装RPMs. 一般地,集群中的一台机器被唯一地设计成NameNode,还有一台机器被设置成ResourceManager.这是master(主). 集群中剩下的机器作为DataNode 和 NodeManager.这些是

Visual Studio Code中文文档

Visual Studio Code中文文档 Visual Studio Code是一个轻量级但是十分强大的源代码编辑器,重要的是它在Windows, OS X 和Linux操作系统的桌面上均可运行.Visual Studio Code内置了对JavaScript, TypeScript和Node.js语言的支持,并且为其他语言如C++, C#, Python, PHP等提供了丰富的扩展库和运行时. 一.Visual Studio Code实际应用(一)快速强大的编码功能:    能够快速捕捉程

MyBatis Generator中文文档

MyBatis Generator中文文档 MyBatis Generator中文文档地址: http://mbg.cndocs.tk/ 该中文文档由于尽可能和原文内容一致,所以有些地方如果不熟悉,看中文版的文档的也会有一定的障碍,所以本章根据该中文文档以及实际应用,使用通俗的语言来讲解详细的配置. 本文中所有节点的链接都是对应的中文文档地址,可以点击查看详细信息. 下载本文档的PDF版本 注:本文后面提到的MBG全部指代MyBatis Generator. 运行MyBatis Generato

HYBControllerTransitions中文文档

中文文档 HYBControllerTransitions是自定义围场动画API封装类库,使用简便.使用者不需要了解太多转场动画知识,即可轻松接入项目使用. 这是一个给开发者们提供自定义push.pop.dismiss和present转场动画的开源组件.现在库中支持泡泡放大缩小围场.模态半屏转场和移动切换转场(KeyNote某转场效果).对于开发者们来说,这是一个很不错的开源库.开发者不需要了解转场知识,只需要简单一个API就可以实现对应的功能. 如果想要更深入地学习,请在源码中查看对应的注释说