Vue学习笔记(三)

news2024/11/23 19:19:45

Vue学习笔记三

  • 1.组件的引入及使用
  • 2.插槽
  • 3. 插槽三种写法
    • 3.1 第一种
    • 3.2 第二种
    • 3.3 第三种简化写法
  • 4.组件生命周期
  • 4.Vue路由

1.组件的引入及使用

components中写入组件Header.vue

在这里插入图片描述
App.vue中进行引入
在这里插入图片描述

<template>
  <div>
    <!-- 组件化: 1个页面由不同的部分组合而成 -->
    <!-- 团队协作时, 会把网页拆分成不同的模块, 然后分别书写, 最终合并到一起 -->
    <!-- 文件夹: components 就是专门放 组件的 -->
    <Header />
    <!-- 可以复用 -->
    <Header />
    <Header />
    <Header />
  </div>
</template>

<script>
// 组件使用的三个步骤 引用 -> 注册 -> 使用
// 名称要求大驼峰,避免不小心 和 系统标签名 重复-系统标签全是小写
import Header from "./components/Header.vue";

export default {
  // vcompoments
  components: {
    // 下方是简化写法,完整格式 Header:Header
    // 第一个Header是在当前页面使用时的标签名
    // 第二个Header是上方引入时的名字
    Header, // 注册到当前App.vue中
  },
};
</script>

<style lang="scss" scoped></style>

2.插槽

基本使用:
components中的组件中添加slot
MySlotDemo.vue

<template>
  <div class="box">
    <!-- 插槽 -->
    <div>
      <!-- 标签slot 代表插槽,相当于占位符,真正运行时会替换成template中的内容 -->
      <slot></slot>
    </div>
    <div></div>
    <div></div>
  </div>
</template>

<script>
export default {};
</script>

<style lang="scss" scoped>
.box {
  border: 1px solid red;
  width: 300px;
  // display: flex;
  > div {
    height: 100px;
    // width: 300px;
    border: 1px solid blue;
    margin: 4px;
  }
}
</style>

App.vue

<template>
  <div>
    <my-slot-demo>
       <template>
               
        <div>今日天气晴朗, 温度<b>20</b>, 适合户外活动</div>
             </template
      >
    </my-slot-demo>
  </div>
</template>

<script>
import MySlotDemo from "./components/MySlotDemo.vue";

export default {
  components: { MySlotDemo },
};
</script>

<style lang="scss" scoped></style>

在这里插入图片描述

3. 插槽三种写法

3.1 第一种

在App.vue中template 中 声明slot=“body”
在这里插入图片描述

3.2 第二种

在App.vue中template 中 使用v-slot:footer
在这里插入图片描述

3.3 第三种简化写法

在App.vue中template 中 使用#body
在这里插入图片描述

4.组件生命周期

MyLifeCom

<template>
  <div>
    <h2>我是 MyLife 组件</h2>
    <div>{{ count }}</div>
    <button @click="startCount">启动定时器</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      count: 1,
    };
  },
  methods: {
    startCount() {
      // setInterval: 是window对象的属性
      // 把定时器保存到 timer 中, 才能在其他位置使用

      // timer没有声明 但是可以直接用, 因为 对象.未定义属性 = 值
      // 会自动为对象添加新的值;  this是当前的vue对象

      this.timer = setInterval(() => {
        this.count++;
        console.log(this.count);
      }, 1000);
    },
  },
  // 一个组件被创建到显示 到更新 到销毁的过程中, 组件都可以直到自身发生了什么
  // 钩子函数: 在固定的时机自动触发的函数 -- hook
  beforeCreate() {
    // before 在...之前;  create 创建
    console.log("组件即将被创建");
  },
  created() {
    console.log("创建创建完毕");
  },
  // mount: 挂载; 代表把DOM元素 加载到 DOM树 上
  beforeMount() {
    console.log("开始挂载组件到DOM树");
  },
  mounted() {
    //关于this指向问题
    // 箭头函数的this 指向其声明时所在的作用域: vue.mounted() 调用的
    // 箭头函数的this指向 vue 对象
    // setInterval(() => {
    //   this.count++
    // }, 1000)

    // 普通函数: this指向运行时所在对象,  window的定时器, 所以指向的window
    let a = function () {
      this.count++;
    };
    // bind: 强行绑定 a 函数的this 为当前 vue 对象
    setInterval(a.bind(this), 1000);

    console.log("组件已显示在DOM树");
    // 需求: 组件加载到页面后, 立刻发送网络请求, 获取数据
    let url = "http://www.codeboy.com:9999/data/product/list.php";

    this.axios.get(url).then((res) => {
      console.log(res);
    });
  },
  beforeUpdate() {
    console.log("数据的改动导致DOM即将更新");
  },
  updated() {
    console.log("数据的改动, 成功更新DOM");
  },
  beforeDestroy() {
    // destroy: 毁灭,销毁
    console.log("组件即将销毁");
    // 销毁定时器
    clearInterval(this.timer);
  },
  destroyed() {
    console.log("组件销毁完毕");
  },
};
</script>

<style lang="scss" scoped></style>

App.vue

<template>
  <div>
    <!-- 组件的生命周期 -->
    <!-- 组件: 准备创建 -> 创建完毕 -> 准备挂载 -> 挂载完毕 -> 准备更新 -> 更新完毕 -> 准备销毁 -> 销毁完毕 -->
    <my-life-com v-if="show"> </my-life-com>
    <!-- v-if:根据值来删除/添加 DOM元素 -->
    <button @click="show = !show">显示/隐藏</button>
  </div>
</template>

<script>
import MyLifeCom from "./components/MyLifeCom.vue";

export default {
  components: { MyLifeCom },
  data() {
    return {
      show: false,
    };
  },
};
</script>

<style lang="scss" scoped></style>

4.Vue路由

Vue路由官网
Demo
views中新建index.vue
在这里插入图片描述
在App.vue中

<template>
  <div>
    <!-- SPA: 单页应用; 局部切换页面内容, 整个页面是App.vue,没有变化 -->
    <div class="nav">
      <!-- 路由跳转要使用 router-link 标签 代替 a 标签 -->
      <a href="">首页</a>
      <a href="">关于净美仕</a>
      <a href="">公司动态</a>
      <a href="">联系我们</a>
      </div>
      <div class="body">
        <router-view />
      </div>
  </div>
</template>

<script>
export default {
};
</script>

<style lang="scss" scoped>
.nav {
  border: 1px solid gray;
  padding: 5px;
  display: flex;
  > a {
    padding: 10px;
    background-color: antiquewhite;
    margin: 0 4px;
  }
}

.body {
  border: 1px solid red;
  height: 300px;
}
</style>

	<!--  router-view :路由的-视图-->
    <!-- 这是一个占位符标签,实际运行时会根据路由的值切换成指定的组件 -->

在这里插入图片描述
index.js
在这里插入图片描述

import Vue from "vue";
import VueRouter from "vue-router";
import HomeView from "../views/HomeView.vue";

// 引入组件
import Index from "../views/Index.vue";

Vue.use(VueRouter);
// 用于配置 路径 和 组件 的对应关系 
const routes = [
  {
    path: "/fz",  //path代表路径
    name: "Index", // 名字 是这个配置的名字后续有用
    component: Index,  // 对应的组件
  },
  {
    path: "/about",
    name: "about",
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () =>
      import(/* webpackChunkName: "about" */ "../views/AboutView.vue"),
  },
];

const router = new VueRouter({
  mode: "history",
  base: process.env.BASE_URL,
  routes,
});

export default router;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

excel日期函数:DATEDIF的几个实际应用公式编写

DATEDIF函数不仅可以用来计算年龄、工龄、工龄工资、项目周期&#xff0c;还可以用来做生日倒计时提醒&#xff0c;项目竣工日倒计时提醒等等。用上它&#xff0c;您再也不会缺席那些重要的日子&#xff0c;不论是亲人生日、项目竣工日&#xff0c;还是儿女的毕业典礼日。DATED…

明道云大湾区2023年季度闭门会议圆满结束

2023年1月12日&#xff0c;明道云在深圳坂田天安云谷召开明道云大湾区2023年季度闭门分享会。超过百位来自中大型企业组织的IT部门代表和业务技术专家莅临现场&#xff0c;进行了一下午的同台交流。广汽本田、深圳龙华区人民医院、民生银行及华润置地的项目代表&#xff0c;深度…

WebService最优方案选择

需求 最近&#xff0c;接触到了一个java对接C#的项目&#xff0c;使用WebService技术开发。项目已经快告一段落了&#xff0c;经过这几个月接触和使用。我有了一个清晰的认识&#xff0c;之前也调研了互联网上大部分实现的通讯&#xff0c;他们的优缺点&#xff0c;我都有一定…

linux系统下如何获取文件的创建时间

linux 获取文件的创建时间 提到获取文件的创建时间&#xff0c;写Java的小伙伴可能会说&#xff0c;那太简单了&#xff0c;java.nio.file.attribute.BasicFileAttributes下这个类不就记录了文件的相关信息吗&#xff0c;比如下面这段代码不就得到文件的创建时间了嘛&#xff…

chrono_CLOCK(二)

chrono_CLOCK&#xff08;二&#xff09; 文章目录chrono_CLOCK&#xff08;二&#xff09;从测量C程序运行时间引入C风格C风格时钟的成员和源码分析成员函数成员变量Clock提供的操作例子三个clock区别例子三个clock的精度问题方式一方式二从测量C程序运行时间引入 C风格 在C…

数据库,计算机网络、操作系统刷题笔记33

数据库&#xff0c;计算机网络、操作系统刷题笔记33 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle…

自定义View的学习笔记1-1

这一系列主要是跟随扔物线的学习笔记。 自定义View主要是三个部分&#xff0c;绘制&#xff0c;布局&#xff0c;触摸反馈。 绘制是这三个部分中&#xff0c;最重要的一个。 先说绘制&#xff0c;所谓绘制&#xff0c;指的就是控件内容的显示。啥意思&#xff0c;比如我们作…

02 技术太卷我学Apex-级联值列表

02 技术太卷我学Apex-级联值列表 0 值列表概念 就是页面输入时从下拉列表中选择固定值。 值列表可以在APEX中【共享组件】-【其它组件】-【值列表】创建&#xff0c;也可以也页面上自己用sql语句&#xff08;一般需要级联值列表最好在页面上创建&#xff09;创建。 1 创建一…

Node版本锁定

Node版本锁定问题方案一、锁定Node版本二、自动切换Node版本问题 接手项目时&#xff0c;不知道项目所用的Node版本同一个项目&#xff0c;不同人用不同的Node版本&#xff0c;引起编译后的未知问题 方案 一、锁定Node版本 在package.json中配置 engines&#xff0c;限定项目…

【微电网】基于改进粒子群算法的微电网优化调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

云原生周刊 | 使用 ChatGPT 协助解决 Prometheus 告警

开源项目推荐 kubernetes-chatgpt-bot 这是一个适用于 Slack 的 ChatGPT 机器人&#xff0c;只要有监控告警发送到 Slack 频道中&#xff0c;你就可以通过机器人向 ChatGPT 咨询如何解决这个告警&#xff0c;ChatGPT 将会给出一个较为详细的解决方案。 Copacetic Copacetic …

WEB文件管理器和上传器:GleamTech FileUltimate 8.5.1.0

GleamTech FileUltimate适用于 ASP.NET Core、MVC 和 WebForms 的FileUltimate文件管理器和上传器 将文件管理器快速集成到您的 ASP.NET 应用程序或站点中。 使用访问控制浏览和管理文件。 接受具有高级上传功能的文件&#xff08;上传器也可作为独立组件使用&#xff09;。 提…

应用程序进程启动过程

1 应用程序进程简介 想要启动一个应用程序&#xff0c;首先要保证这个应用程序所需要的应用程序进程已经启动。 AMS 在启动应用程序时会检查这个应用程序所需要的应用程序进程是否已经存在&#xff0c;如果不存在就会请求 Zygote 进程启动需要的应用程序进程。 在 Zygote进程启…

2023牛客寒假算法基础集训营1--鸡玩炸蛋人(带权并查集) 诈骗题?

题目如下&#xff1a; 示例1 输入 6 4 1 2 2 3 1 3 4 6 0 0 0 0 0 0输出 14示例2 输入 6 4 1 2 2 3 1 3 4 6 0 0 0 0 2 0输出 1题目链接 题解 or 思路&#xff1a; 首先如果我们理解题意了&#xff0c;这个题是顶级诈骗。 因为是无向图&#xff0c;我们需要记录图中 环…

算法第十三期——BFS-双向广搜

双向广搜 应用场景&#xff1a;有确定的起点s和终点t&#xff1b;把从起点到终点的单向搜索&#xff0c;变换为分别从起点出发和从终点出发的“相遇”问题。操作&#xff1a;从起点s(正向搜索&#xff09;和终点t(逆向搜索&#xff09;同时开始搜索&#xff0c;当两个搜索产生…

编程太难不适合女生学?来看 N 多小姐姐的回应!

某女程序员&#xff1a;我要去互联网公司做程序员&#xff1f;网友&#xff1a;你疯了&#xff1f;程序员很累的... 女生不适合做程序员&#xff0c;还是去做产品经理吧。画外音&#xff1a;我去&#xff0c;产品经理不累吗&#xff1f;并不是女生不适合写代码&#xff0c;也不…

python cairosvg 库专题博客,10分钟掌握 cairosvg

cairosvg 库用于将 SVG 图像转换为其他图片格式。它使用 Cairo 库来绘制 SVG 图像&#xff0c;并支持将 SVG 图像转换为 PNG、PDF、PS、SVG 和 GIF 格式。 python cairosvgPython cairosvg 上手案例cairosvg 直接将 svg 图像转换为二进制数据cairosvg 库函数清单总结Python cai…

趣味三角——第1章——角

平面角是平面内相交但不在一条直线上的两条直线之间的倾角(A plane angle is the inclination to one another of two lines in a plane which meet one another and do not lie in a straight line.)。 ——Euclid(欧几里得), 元素(The Elements)&#xff0c;定义8。 几何实体…

【C++】Hash开散列,unordered_set(map) 的封装以及迭代器的实现

上一篇博客我们使用闭散列的方式实现了 Hash&#xff0c;其实在STL库unordered_set、unordered_map中底层是开散列的方式实现的Hash&#xff0c;所以&#xff0c;本篇博客就再使用开散列的方式实现Hash&#xff0c;并将unordered_set、unordered_map进行封装。 目录 一、开散…

C 数据结构1 —— 线性表-顺序表\单链表\双链表

文章目录1. 线性表1.1 定义1.2 特点2. 顺序表(顺序存储结构)2.1 定义(存储结构代码描述)2.2 插入元素2.2.1 图形演示2.2.2 代码表示2.3 删除元素2.3.1 图形演示2.3.2 代码表示2.4 完整代码2.5 动态分配数组3. 单链表(链式存储结构)3.1 定义(存储结构代码描述)3.2 单链表的读取3…