尽管有 props 和 events,可是有时仍然须要在 JavaScript 中直接访问子组件。为此可使用 ref 为子组件指定一个索引 ID。例如:vue
<div id="parent"> <user-profile ref="profile"></user-profile> </div> var parent = new Vue({ el: '#parent' }) // 访问子组件 var child = parent.$refs.profile
当 ref
和 v-for
一块儿使用时,ref
是一个数组,包含相应的子组件。node
.vue 组件数组
DOM 模板app
Vue 提供了 transition 外层包裹容器组件(wrapper component),能够给下列情形中的任何元素和组件添加进入/离开(enter/leave)过渡dom
<div id="demo"> <button v-on:click="show = !show"> Toggle </button> <transition name="fade"> <p v-if="show">hello</p> </transition> </div>
每一个元素都是一个节点。每一段文字都是一个节点。甚至注释也都是节点!节点只是页面的一部分。正如在一棵家谱树中同样,每一个节点均可以有子节点(也就是说,每一个节点均可以包含多个子节点)。函数
有效地更新全部这些节点多是很困难的,但幸运的是,你无需手动执行。相反,只需在 Vue 模板中,在页面中添加你须要用到的 HTML:this
<h1>{{ blogTitle }}</h1>
或者经过一个 render 函数:code
render: function (createElement) { return createElement('h1', this.blogTitle) }
在这两种场景中,Vue 会自动保持页面更新,更确切地说,在 blogTitle 修改时,也一样可以及时更新。component
Vue 经过实现一个 virtual DOM,来跟踪那些「真正须要对 DOM 所作的修改」。仔细看看这一行:blog
return createElement('h1', this.blogTitle)
createElement 实际返回的是什么呢?准确地说,返回的并不是一个真正的 DOM 元素。可能更确切地说,应该将其命名为 createNodeDescription(译注:createNodeDescription,建立节点描述),包含「哪些节点应该由 Vue 渲染在页面上」的相关描述信息,也包括全部子节点的相关描述。咱们将以上这个节点描述称为 “virtual node”(译注:virtual node,虚拟节点),一般缩写为 VNode。”virtual DOM” 就是由 Vue 组件树构建出来的,被称为整个 VNodes 树。