8、插槽、DOM操作(虚拟DOM)、过滤器(fliter)

简介: 8、插槽、DOM操作(虚拟DOM)、过滤器(fliter)

1、插槽slot


  1. 创建更加灵活,易扩展,自定义buttontable
  2. 开发或使用UI库,了解组件制作原理
  3. 后续的ElementUI的组件,基本都是基于插槽实现的
    <!--  案例二  -->
    <div class="case2">
      <h1>案例二</h1>
      <!-- 插槽 -->
      <Layout>
        <template v-slot:header>
          <h1>header</h1>
        </template>
        <template v-slot:content>
          <h1>content</h1>
        </template>
        <template v-slot:footer>
          <h1>footer</h1>
        </template>
      </Layout>
    </div>


2、DOM(文档对象模型)


DOM
DOM 文档对象模型
DOM节点 元素节点、属性节点、文本节点
jQuery 通过操作DOM实现页面的效果


3、Vue中的DOM是虚拟的(this.$refs


  • 1、Vue中的数据变化,并不是直接改变DOM,而是通过改变虚拟DOM,并计算变更差异,进而修改DOM中有变化的内容
  • 2、Vue应用开发过程中,大部分情况是不需要获取真实的DOM,不用把jQuery的思想带到Vue中


  // 2、模板加载
<div ref="box">Hello world!</div>
  mounted() {
    console.log("这是mounted函数的内容");
    // 获取真实DOM
    // let box = document.querySelector(".case2 div");
    // let style = window.getComputedStyle(box);
    // console.log(style.height);
    // 获取虚拟DOM
    let box = this.$refs.box;
    let style = window.getComputedStyle(box);
    console.log(style.height);
  },


4、过滤器(通过固定算法重新组织数据)


    <!--  案例三  -->
    <div class="case3">
      <h1>案例三</h1>
      <p>过滤器,拆分字符串,日期格式</p>
      <p>{{ message | mySplit }}</p>
      <p>{{ date | dateFormate }}</p>
    </div>
  // 案例三:过滤器,拆分字符串,日期格式
  filters: {
    mySplit(value) {
      return value.split("").join();
    },
    dateFormate(value) {
      let data = new Date(value);
      let year = data.getFullYear();
      let month = data.getUTCMonth() + 1;
      let day = data.getDate();
      return `${year}年${month}月${day}日`;
    },
  },


5、源代码

<template>
  <div id="app">
    <!--  案例一  -->
    <div class="case1">
      <h1>案例一</h1>
      <div v-if="loading">
        <p>异步加载数据正在进行中...</p>
      </div>
      <div v-if="!loading">
        <p>异步加载数据完成!</p>
        <ul v-for="(value, index) of userList" :key="index">
          <li>{{ value }}</li>
        </ul>
      </div>
    </div>
    <!--  案例二  -->
    <div class="case2">
      <h1>案例二</h1>
      <p>通过this.$refs获取数据</p>
      <div ref="box">Hello world!</div>
    </div>
    <!--  案例三  -->
    <div class="case3">
      <h1>案例三</h1>
      <p>过滤器,拆分字符串,日期格式</p>
      <p>{{ message | mySplit }}</p>
      <p>{{ date | dateFormate }}</p>
    </div>
  </div>
</template>
<script>
export default {
  // 1、初始化数据
  created() {
    console.log("这是created函数的内容");
    this.getUserList();
    this.loading = false;
  },
  // 2、模板加载
  mounted() {
    console.log("这是mounted函数的内容");
    // 案例二:通过this.$refs获取数据
    // 获取真实DOM
    // let box = document.querySelector(".case2 div");
    // let style = window.getComputedStyle(box);
    // console.log(style.height);
    // 获取虚拟DOM
    let box = this.$refs.box;
    let style = window.getComputedStyle(box);
    console.log(style.height);
  },
  data() {
    return {
      message: "Hello world",
      date: "2022-3-3",
      userList: [],
      loading: true,
    };
  },
  methods: {
    getUserList() {
      // 案例一
      // 3、通过计时器,模拟一个ajax异步加载数据
      setTimeout(() => {
        this.userList = ["jasmine", "jamsine_qiqi", "qiqi"];
      }, 3000);
    },
  },
  // 案例三:过滤器,拆分字符串,日期格式
  filters: {
    mySplit(value) {
      return value.split("").join();
    },
    dateFormate(value) {
      let data = new Date(value);
      let year = data.getFullYear();
      let month = data.getUTCMonth() + 1;
      let day = data.getDate();
      return `${year}年${month}月${day}日`;
    },
  },
};
</script>
<style>
#app {
  display: flex;
  justify-content: space-around;
}
.case2 div {
  display: block;
  width: 100px;
  height: 100px;
  background-color: antiquewhite;
}
</style>


相关文章
|
6月前
|
缓存 JavaScript 前端开发
【JavaScript 技术专栏】DOM 操作全攻略:从基础到进阶
【4月更文挑战第30天】本文深入讲解JavaScript与DOM交互,涵盖DOM基础、获取/修改元素、创建/删除元素、事件处理结合及性能优化。通过学习,开发者能掌握动态改变网页内容、结构和样式的技能,实现更丰富的交互体验。文中还讨论了DOM操作在实际案例、与其他前端技术结合的应用,助你提升前端开发能力。
247 0
|
2月前
|
JavaScript 前端开发 算法
React技术栈-虚拟DOM和DOM diff算法
这篇文章介绍了React技术栈中的虚拟DOM和DOM diff算法,并通过一个实际案例展示了如何使用React组件和状态管理来实现动态更新UI。
41 2
|
1月前
|
JavaScript 前端开发 算法
真实DOM和虚拟DOM有哪些区别?
本文介绍了真实DOM和虚拟DOM的概念、使用方式、优势、劣势、使用场景、影响因素、开发效率和性能对比。真实DOM是浏览器提供的原生接口,直接操作简单直观,但频繁操作会导致性能损耗。虚拟DOM是真实DOM的抽象表示,通过比较差异减少DOM操作,适用于大规模数据变更和复杂交互的页面。开发者应根据具体需求选择合适的DOM操作方式,以提高页面性能和开发效率。
67 1
真实DOM和虚拟DOM有哪些区别?
|
3月前
|
移动开发 JavaScript 前端开发
【Vue面试题二十二】、什么是虚拟DOM?如何实现一个虚拟DOM?说说你的思路
这篇文章深入探讨了虚拟DOM的概念、必要性以及在Vue中的实现方式,解释了虚拟DOM如何作为真实DOM的轻量级抽象,通过优化DOM操作提高性能,并实现跨平台渲染的能力。
【Vue面试题二十二】、什么是虚拟DOM?如何实现一个虚拟DOM?说说你的思路
|
3月前
|
JavaScript 算法 前端开发
"揭秘虚拟DOM的神奇魔法:从零开始打造高效渲染引擎,颠覆你的DOM操作认知!"
【8月更文挑战第20天】虚拟DOM是一种优化技术,通过在内存中构建DOM树的轻量级副本,减少浏览器重排和重绘,提升性能。本文简要介绍了DOM及其重要性,并深入解释了虚拟DOM的概念。虚拟DOM通过模拟真实DOM结构,在内存中进行数据更新,仅将变动部分同步到实际DOM。文中还提供了一个简易虚拟DOM的实现方案,包括虚拟节点创建、渲染函数及一个基本的diff算法,用于比对新旧虚拟DOM并高效更新实际DOM。通过示例展示了如何构建和渲染一个简单的虚拟DOM。这有助于理解虚拟DOM的基本工作原理和技术细节。
50 4
|
3月前
|
JavaScript 前端开发 API
区分 DOM 与虚拟 DOM
【8月更文挑战第24天】
98 0
|
5月前
|
JavaScript 前端开发 UED
JavaScript基础-DOM操作:查找、创建、修改
【6月更文挑战第12天】本文介绍了DOM基础,包括查找元素(getElementById、getElementsByClassName等)、创建新节点(createElement、createTextNode)和修改节点(innerText、innerHTML、setAttribute等)。强调了易错点,如ID唯一性、性能考量和安全问题,并提供了代码示例。熟练掌握DOM操作对前端开发至关重要,但应注意性能优化,适时使用框架或库。
59 2
JavaScript基础-DOM操作:查找、创建、修改
|
5月前
|
JavaScript 前端开发
DOM操作有哪些方法可以改变元素的样式?
【6月更文挑战第30天】DOM操作有哪些方法可以改变元素的样式?
42 2
|
5月前
|
JavaScript 前端开发 开发者
DOM操作
【6月更文挑战第30天】DOM操作
37 1
|
5月前
|
JavaScript 前端开发 算法
虚拟DOM是React的关键技术,它是个轻量的JS对象树,模拟实际DOM结构。
【6月更文挑战第27天】虚拟DOM是React的关键技术,它是个轻量的JS对象树,模拟实际DOM结构。当状态改变,React不直接修改DOM,而是先构建新的虚拟DOM树。通过 diff 算法比较新旧树,找到最小变更,仅更新必要部分,提高性能,避免频繁DOM操作。虚拟DOM还支持跨平台应用,如React Native。它优化了更新流程,简化开发,并提升了用户体验。
42 1