Vue组件基础

Vue组件基础

每用一次组件,就会有一个它的新实例被创建

data必须是一个函数

一个组件的data选项必须是一个函数,因此每个函数可以维护一份被返回对象的独立拷贝。

避免一个实例,影响到其他所有实例。

动态传递prop

<blog-post
  v-for="post in posts"
  v-bind:key="post.id"
  v-bind:title="post.title"
></blog-post>

可以使用v-bind来动态传递prop。一开始不清楚要渲染的具体内容,比如从一个api获取博文列表的时候,是非常有用的。

单个根元素

每个组件必须只有一个根元素

当组件变得越来越复杂的时候,为每个相关信息定义一个prop会变得很麻烦。

所以让它变成一个单独的post prop

<blog-post
  v-for="post in posts"
  v-bind:key="post.id"
  v-bind:post="post"
></blog-post>
<script>
Vue.component('blog-post', {
  props: ['post'],
  template: `
    <div class="blog-post">
      <h3>{{ post.title }}</h3>
      <div v-html="post.content"></div>
    </div>
  `
})
</script>

在组件上使用v-model

自定义事件也可以用于创建v-model的自定义组件

v-mdoel实际上为语法糖

<input v-model="searchText">
//等价于
<input
  v-bind:value="searchText"
  v-on:input="searchText = $event.target.value"
>

当用在组件上时,v-model则会这样

<custom-input
  v-bind:value="searchText"
  v-on:input="searchText = $event"
></custom-input>

为了让它正常工作,这个组件内的<input>

  • 将其value特性绑定到一个名叫value的prop上
  • 在其input事件被触发时,将新的值通过自定义的input事件抛出
Vue.component('custom-input', {
  props: ['value'],
  template: `
    <input
      v-bind:value="value"
      v-on:input="$emit('input', $event.target.value)"
    >
  `
})
//重写input事件传出的值,因为v-model在自定义组件和在<input>上不一致

通过插槽分发内容

在需要的地方加入插槽

动态组件

<!-- 组件会在 `currentTabComponent` 改变时改变 -->
<component v-bind:is="currentTabComponent"></component>

动态和异步组件

解析DOM模版时的注意事项

有些 HTML 元素,诸如<ul>,<ol>,<table><select>,对于哪些元素可以出现在其内部是有严格限制的。而有些元素,诸如 <li>,<tr>,<option>,只能出现在其它某些特定的元素内部

使用这些有约束条件的元素时会遇到一些问题

<table>
  <blog-post-row></blog-post-row>
</table>

这个自定义组件<blog-post-row> 会被作为无效的内容提升到外部,并导致最终渲染结果出错。幸好这个特殊的 is 特性给了我们一个变通的办法:

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

需要注意的是以下来源使用模版的话,这条限制是不存在的

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 组件是可复用的Vue实例,且带有一个名字。我们可以在一个通过new Vue创建的Vue根实例中,把这个组件作为自定...
    oWSQo阅读 361评论 0 0
  • 什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装...
    youins阅读 9,727评论 0 13
  • 组件是可复用的 Vue 实例,且带有一个名字:在这个例子中是 。我们可以在一个通过 new Vue 创建的 Vu...
    波克比阅读 227评论 0 0
  • 祭出demo 基础示例 组件是可复用的 Vue 实例,所以它们与 new Vue 接收相同的选项,例如 data、...
    rainbowboy阅读 874评论 0 50
  • 传递静态或动态Prop 传入静态的值: 这时候值是一个字符串你也可以通过v-bind动态赋值: 这时候值是一个js...
    A郑家庆阅读 450评论 0 0

友情链接更多精彩内容