vue知识点总结(四)—— 插槽

153 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

前言

大家好呀,我是L同学。在上篇文章vue知识点总结(三)—— 组件生命周期中,我们学习了vue相关知识点,包括组件的各个生命周期、ref、动态组件、keep-alive等相关知识点。今天,在这篇文章中,vue其他的相关知识点,包括插槽、v-model语法糖、单页面应用程序等相关知识点。

插槽

插槽用于替换内容 / 发布内容。举个例子,有一辆车子,它存放发动机的位置留着一个空,我们把这个空叫做插槽。这个插槽里面既可以放一个大众发动机,也可以放奥迪发动机。

slot的基本使用

slot的基本使用。

<!-- 第一次 -->
<el-car>
  <div>大众发动机</div>
</el-car>
<!-- 第二次使用 -->
<el-car>
  <p>奥迪发动机</p>
</el-car>

注册组件。

// 组件结构
 <div class="el-car">
    <h3>友情提示</h3>
    <hr/>
    <slot></slot>
    <div>
      <button>取消</button>
      <button>确定</button>
    </div>
  </div>

具名插槽

具名插槽使用。

<!-- 大众 -->
    <el-car>
      <template v-slot:n1>  // #n1  简写 类似 v-on: => @  v-bind: => :
         <h3>大众提示</h3>
      </template>
      <template v-slot:n2>  // #n2
        <p>大众发送机</p>
      </template>
    </el-car>
<!-- 奥迪 -->
    <el-car>
       <template v-slot:n1>  // #n1
         <h3>奥迪提示</h3>
      </template>
      <template v-slot:n2>  // #n2
        <p>奥迪发送机</p>
      </template>
    </el-car>

组件内部。

<template>
  <div class="el-car">
    <slot name='n1'></slot>
    <hr />
    <slot name='n2'></slot>
    <div>
      <button>取消</button>
      <button>确定</button>
    </div>
  </div>
</template>

作用域插槽

有一个需求,子节点访问子组件内的数据。

使用。

// 对象
<template #n2='obj'>
    <p>大众发动机 :  {{ obj.type }} - {{ obj.price }}</p>
</template>
// 解构
<template #n2='{ type, price}'>
    <p>大众发动机 :  {{ type }} - {{ price }}</p>
</template>

组件内部。

<template>
  <div class="el-car">
    <slot name="n1" ></slot>
    <hr />
    <slot name="n2" :type="type" :price="price"></slot>
    <div>
      <button>取消</button>
      <button>确定</button>
    </div>
  </div>
</template>
// 数据
 data() {
    return {
      type: ' EA888',
      price: 200000,
    }
  },

v-model语法糖

v-model本质上是 value属性和input事件的一层包装。v-model的作用是提供数据的双向绑定。数据发生了改变,页面会自动变v-bind:value。页面输入的时候(改变)数据会自动变化v-on:input。v-model是语法糖, v-model等价于给一个input框提供了:value属性以及@input事件,但是如果每次使用input框,都需要提供value和input事件比较麻烦,所以使用v-model。

<template>
  <div>
    <input type="text" v-model="msg">
    <input type="text" :value="msg" @input="msg = $event.target.value">

    <input type="text" :value="car" @input="car = $event.target.value">
    <input type="text" v-model="car">
  </div>
</template>

v-model给表单元素使用

我们经常遇到一种场景: 父组件提供一个数据给子组件使用(父传子),子组件需要修改父组件的数据,所以需要子传父把值传给父组件。 这种场景可以使用v-model进行简写。

定义组件的时候,注意接收的值叫value,子传父触发的事件叫input。

单页应用程序

页面应用程序分类分为单页面应用程序和多页面应用程序。

  • SPA: Single Page Application 单页面应用程序
  • MPA : Multiple Page Application 多页面应用程序

单、多页面应用的区别

  • 单页web应用 就是只有一个 web 页面的应用, 是只加载单个 HTML 页面。
  • 多页面应用 每次请求服务器都是会返回一个完整的页面 它们的区别在于:
  • 对于单页应用程序来说,只有第一次会加载页面,以后的每次请求,仅仅是获取必要的数据.然后, 由页面中 js 解析获取的数据,展示在页面中。
  • 对于多页面应用 , 一个应用会有多个页面, 每次请求服务器都会返回一个完整的页面。

单页面应用的优势

  • 传统的多页面应用程序,每次请求服务器返回的都是一整个完整的页面。
  • 单页面应用程序只有第一次会加载完整的页面。
  • 以后每次请求仅仅获取必要的数据,减少了请求体积,加快页面响应速度,降低了对服务器的压力。
  • SPA更好的用户体验,运行更加流畅。

单页面应用的缺点

  • 开发成本高 (需要学习路由) :vue-router、react-router。
  • 不利于 SEO 搜索引擎优化。谷歌浏览器在解决这个问题 ssr:服务端渲染 server side rendering