首页 > 其他分享 >Vue学习笔记(六)

Vue学习笔记(六)

时间:2024-10-27 14:50:57浏览次数:3  
标签:box Vue 笔记 学习 Header vue 组件 import border

模板引用(获取DOM 操作)

虽然Vue的声明性渲染模型为你抽象了大部分对DOM的直接操作,但在某些情况下,我们仍然需要直接访问底层DOM元素。要实现这一点,我们可以使用特殊的refattribute。

挂载结束后引用都会被暴露在this.$refs之上。

<script>
    /**
    * 内容改变:{{模板语法}}
    * 属性改变:v-bind
    * 事件改变:v-on
    */
    export default {
        data() {
            return {
                content: "内容"
            }
        },
        methods: {
            getElementHandle() {
                console.log(this.$refs.container);
                console.log(this.$refs.username.value);
            }
        }
    }
</script>

<template>
    <div ref="container" class="container">{{ content }}</div>
    <input type="text" ref="username">
    <button @click="getElementHandle">获取元素</button>
</template>

组件组成

组件最大的优势就是可复用性

当使用构建步骤时,我们一般会将Vue组件定义在一个单独的.vue文件中,这被叫做单文件组件(简称SFC)

组件组成结构

<script>
export default {
  data() {
    return {
      message: "基础组件组成"
    }
  }
}
</script>

<template>
  <div class="container">{{ message }}</div>
</template>

<!-- scoped 限定样式只在当前组件生效 -->
<style scoped> 
  .container {
    width: 100%;
    height: 100%;
    color: red;
  }
</style>

组件引用

<script>
//1.引入组件
import Mycomponent from './components/Mycomponent.vue'
// 2.注入组件
export default {
  components: {
    Mycomponent
  }
}
</script>

<template>
  <!-- 3.使用组件 -->
  <Mycomponent />
</template>

<style>

</style>

setup可以省略注入组件步骤

组件的嵌套关系

20241027134619

组件允许我们将UI划分为独立的、可重用的部分,并且可以对每个部分进行单独的思考。在实际应用中,组件常常被组织成层层嵌套的树状结构。

这和我们嵌套HTML元素的方式类似,Vue实现了自己的组件模型,使我们可以在每个组件内封装自定义内容与逻辑。

创建组件及引用关系

App.vue

<script>
  import Header from './pages/Header.vue';
  import Main from './pages/Main.vue';
  import Aside from './pages/Aside.vue';

  export default {
    name: 'App',
    components: {
      Header,
      Main,
      Aside
    }
  }
</script>

<template>
  <Header />
  <Main />
  <Aside />
</template>

<style>

</style>

Header.vue

<template>
    <h3>Header</h3>
</template>

<style scoped>
h3 {
    width: 100%;
    height: 100px;
    border: 5px solid #999;
    text-align: center;
    line-height: 100px;
    box-sizing: border-box;
}
</style>

Main.vue

<script>
import Artice from './Artice.vue';
export default {
    components: {
        Artice
    }
}
</script>

<template>
    <div class="main">
        <h3>Main</h3>
        <Artice />
        <Artice />
    </div>
</template>

<style scoped>
.main {
    float: left;
    width: 70%;
    height: 400px;
    border: 5px solid #999;
    box-sizing: border-box;
}
</style>

Aside.vue

<script>
import item from './item.vue';
export default {
    components: {
        item
    }
}
</script>

<template>
    <div class="aside">
        <h3>Aside</h3>
        <item />
        <item />
    </div>
</template>

<style scoped>
.aside {
    float: right;
    width: 30%;
    height: 400px;
    border: 5px solid #999;
    box-sizing: border-box;
}
</style>

Article.vue

<script>
export default {

}
</script>

<template>
    <h3>Article</h3>
</template>

<style scoped>
h3 {
    width: 80%;
    margin: 0 auto;
    text-align: center;
    line-height: 100px;
    box-sizing: border-box;
    margin-top: 50px;
    background: #999;
}
</style>

Item.vue

<template>
    <h3>Item</h3>
</template>

<style scoped>
h3 {
    width: 80%;
    margin: 0 auto;
    text-align: center;
    line-height: 100px;
    box-sizing: border-box;
    margin-top: 10px;
    background: #999;
}
</style>

效果展示

20241027142246

组件注册方式

一个Vue组件在使用前需要先被“注册”,这样Vue才能在渲染模板时找到其对应的实现。组件注册有两种方式:

  1. 全局注册
  2. 局部注册

全局注册

main.js


import { createApp } from 'vue'
import App from './App.vue'
import Header from './pages/Header.vue'

const app = createApp(App)
//在这里引入全局样式
app.component('Header', Header)
app.mount('#app')

App.vue

<script>
  // import Header from './pages/Header.vue';
  import Main from './pages/Main.vue';
  import Aside from './pages/Aside.vue';

  export default {
    name: 'App',
    components: {
      // Header,
      Main,
      Aside
    }
  }
</script>

<template>
  <Header />
  <Main />
  <Aside />
</template>

<style>

</style>

无需在其他Vue文件下注册引入,可以直接使用

坏处

  1. 全局注册,但并没有被使用的组件无法在生产打包时被自动移除(也叫"tree-shaking")。如果你全局注册了一个组件,即使它并没有被实际使用,它仍然会出现在打包后的JS文件中。
  2. 全局注册在大型项目中使项目的依赖关系变得不那么明确。在父组件中使用子组件时,不太容易定位子组件的实现。和使用过多的全局变量一样,这可能会影响应用长期的可维护性。

局部注册(推荐)

局部注册需要使用components选项

<script>
//1.引入组件
import item from './item.vue';
//2.注册组件
export default {
    components: {
        item
    }
}
</script>

<template>
    <div class="aside">
        <h3>Aside</h3>
        <!-- 3.使用组件 ---->
        <item />
        <item />
    </div>
</template>

<style scoped>
.aside {
    float: right;
    width: 30%;
    height: 400px;
    border: 5px solid #999;
    box-sizing: border-box;
}
</style>

标签:box,Vue,笔记,学习,Header,vue,组件,import,border
From: https://blog.csdn.net/qq_73340809/article/details/143268893

相关文章

  • 2024-2025-1 20241417 《计算机基础与程序设计》第五周学习总结
    这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第五周作业)这个作业的目标<Pep/9虚拟机,机器语言与汇编语言,算法与伪代码,测试:黑盒,白盒>作业正文https://www.cnblogs......
  • Java进阶学习笔记54——HashMap、LinkedHashMap、TreeMap
    HashMap集合的底层原理:HashMap跟HashSet的底层原理是一模一样的,都是基于哈希表实现的。实际上,原来学的Set系列集合的底层就是基于Map实现的,只是Set集合中的元素只要键数据,不要值数据而已。哈希表:1)JDK8之前,哈希表=数组+链表;2)JDK8开始,哈希表=数组+链表+红黑树;3)哈希表是......
  • 2024-2025-1 20241320 《计算机基础与程序设计》第5周学习总结
    2024-2025-120241320《计算机基础与程序设计》第5周学习总结作业信息|这个作业属于哪个课程|https://www.cnblogs.com/rocedu/p/9577842.html|这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05|这个作业的目标|Pep/9虚拟机•机器语言与汇编语......
  • Vue 插槽:组件通信的“隐形通道”
    在Vue中,插槽(slot)是实现组件内容分发的机制,允许我们将子组件的内容传递给父组件,从而提升组件的可复用性和灵活性。插槽的本质是通过将父组件内容传递到子组件指定的插槽位置,使得子组件在渲染时可以动态填充不同的内容。1. 插槽的类型Vue中有几种主要的插槽类型:1、默认插......
  • 解析 Vue 模板的本质:从语法糖到渲染过程
    大家耳熟能详的表述如下:Vue模板的本质其实是一种声明式渲染的形式,它在开发过程中提供了将组件的结构与逻辑分离的便利。也就是说,模板template的存在只是为了让我们以更直观的方式描述界面的结构,然而在运行时,模板其实是不存在的,它在底层会被Vue编译为更高效的渲染函数......
  • SpringBoot+Neo4j+Vue+Es集成ES全文检索、Activiti工作流、Neo4J知识图谱的知识库管理
     在数字化高度普及的时代,企事业机关单位在日常工作中会产生大量的文档,例如医院制度汇编,企业知识共享库等。针对这些文档性的东西,手工纸质化去管理是非常消耗工作量的,并且纸质化查阅难,易损耗,所以电子化管理显得尤为重要。【springboot+elasticsearch+neo4j+vue+activiti】实现......
  • 2024-2025-1 20241316 《计算机基础与程序设计》第五周学习总结
    2024-2025-120241316《计算机基础与程序设计》第五周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第五周作业这个作业的目标Pep/9虚拟机,机器语言与汇编语言,算法与伪代码,测试:黑盒,白......
  • 【小记】探探学习平台的字体混淆dm
    正在某学习平台做题,想着把题目复制出来和搜索娘深入探讨一下,却发现:嗯?怎么是一坨火星文?实际上有好几个学习平台都引入了这种字体混淆机制以防止复制,打乱了部分汉字Unicode码点和字形的对应关系。这回咱就来折腾折腾,看看这是怎么个事儿。1.怎么个混淆法来到某课堂平台,打开......
  • (开题报告)django+vue大学生兼职小程序前台论文+源码
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于大学生兼职小程序的研究,现有研究主要以大学生就业相关的大型综合平台为主,专门针对大学生兼职小程序的研究较少。在国内外,就业相关......
  • 人工智能_神经网络103_感知机_感知机工作原理_感知机具备学习能力_在学习过程中自我调
    由于之前一直对神经网络不是特别清楚,尤其是对神经网络中的一些具体的概念,包括循环,神经网络卷积神经网络以及他们具体的作用,都是应用于什么方向不是特别清楚,所以现在我们来做教程来具体明确一下。当然在机器学习之后还有深度学习,然后在深度学习中对各种神经网络的探讨就会比较......