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>


相关文章
|
3月前
|
缓存 JavaScript 前端开发
【JavaScript 技术专栏】DOM 操作全攻略:从基础到进阶
【4月更文挑战第30天】本文深入讲解JavaScript与DOM交互,涵盖DOM基础、获取/修改元素、创建/删除元素、事件处理结合及性能优化。通过学习,开发者能掌握动态改变网页内容、结构和样式的技能,实现更丰富的交互体验。文中还讨论了DOM操作在实际案例、与其他前端技术结合的应用,助你提升前端开发能力。
148 0
|
2月前
|
JavaScript 前端开发 UED
JavaScript基础-DOM操作:查找、创建、修改
【6月更文挑战第12天】本文介绍了DOM基础,包括查找元素(getElementById、getElementsByClassName等)、创建新节点(createElement、createTextNode)和修改节点(innerText、innerHTML、setAttribute等)。强调了易错点,如ID唯一性、性能考量和安全问题,并提供了代码示例。熟练掌握DOM操作对前端开发至关重要,但应注意性能优化,适时使用框架或库。
JavaScript基础-DOM操作:查找、创建、修改
|
2月前
|
JavaScript 前端开发
DOM操作有哪些方法可以改变元素的样式?
【6月更文挑战第30天】DOM操作有哪些方法可以改变元素的样式?
17 2
|
2月前
|
JavaScript 前端开发 开发者
DOM操作
【6月更文挑战第30天】DOM操作
18 1
|
2月前
|
JavaScript 前端开发 算法
虚拟DOM是React的关键技术,它是个轻量的JS对象树,模拟实际DOM结构。
【6月更文挑战第27天】虚拟DOM是React的关键技术,它是个轻量的JS对象树,模拟实际DOM结构。当状态改变,React不直接修改DOM,而是先构建新的虚拟DOM树。通过 diff 算法比较新旧树,找到最小变更,仅更新必要部分,提高性能,避免频繁DOM操作。虚拟DOM还支持跨平台应用,如React Native。它优化了更新流程,简化开发,并提升了用户体验。
26 1
|
1月前
|
JavaScript 前端开发 API
前端框架与库 - jQuery基础与DOM操作
【7月更文挑战第18天】jQuery 是一个简化JavaScript任务的库,以其“write less, do more”理念著称。核心功能包括DOM操作、事件处理和Ajax。DOM操作如选择元素(`$(&quot;p&quot;)`、`$(&quot;#myDiv&quot;)`、`$(&quot;.myClass&quot;)`)、创建及添加元素、修改属性和内容。事件处理如绑定(`click`)和触发(`trigger`)。常见问题涉及`$`符号冲突(使用`jQuery`代替)、异步加载管理和选择器性能优化。了解并规避这些问题能提升jQuery使用效率。
|
2月前
|
JavaScript 前端开发 安全
【JavaScript 】DOM操作快速入门
【JavaScript 】DOM操作快速入门
29 2
|
1月前
|
移动开发 JavaScript 前端开发
VUE实现一个列表清单【props 父子组件通信、slot插槽的使用、全局自定义指令的封装、$nextTick解决异步DOM更新、巧用v-model简化父子组件之间的通信、触发事件的事件源event】
VUE实现一个列表清单【props 父子组件通信、slot插槽的使用、全局自定义指令的封装、$nextTick解决异步DOM更新、巧用v-model简化父子组件之间的通信、触发事件的事件源event】
18 0
|
2月前
|
JSON JavaScript 数据格式
技术好文:tabel表格的dom操作
技术好文:tabel表格的dom操作
14 0
|
3月前
|
JavaScript 前端开发
JavaScript 提供了多种方法来操作 DOM(文档对象模型)
【5月更文挑战第11天】JavaScript 用于DOM操作的方法包括获取元素(getElementById, getElementsByClassName等)、修改内容(innerHTML, innerText, textContent)、改变属性、添加/删除元素(appendChild, removeChild)和调整样式。此外,addEventListener用于监听事件。注意要考虑兼容性和性能当使用这些技术。
34 2