当前位置: 首页 > java >正文

前端面试准备-6

1.script标签中的differ和async的区别

都是异步加载外部的JS脚本文件,不会阻塞HTML的解析

区别:

①:执行顺序。differ保证脚本按照在HTML中出现的执行顺序,一般是在HTML解析完后执行。而async则是谁先下载完谁先执行,async可能会阻断解析以执行脚本。

2.label标签的使用

用于提升表单的可用性和可访问性,把文本标签和相应的表单控件关联起来,用户点击标签时,自动跳转聚焦到相应的表单控件上。

①:包裹控件

<label>用户名:<input type="text" name="username">
</label>

②:通过for属性关联

<label for="username">用户名:</label>
<input type="text" id="username" name="username">

3.在vue组件如何访问根实例

①:使用provide/inject机制

可以在跟组件提供数据,然后在任意子组件使用

// 在根组件或 main.js 中提供数据
import { createApp } from 'vue'
import App from './App.vue'const app = createApp(App)
app.provide('appName', 'Vue3应用')
app.mount('#app')// 或在根组件中
setup() {provide('appName', 'Vue3应用')
}
// 选项式 API
export default {inject: ['appName'],mounted() {console.log(this.appName) // Vue3应用}
}// 组合式 API
setup() {const appName = inject('appName')console.log(appName) // Vue3应用
}

②:使用全局属性

// main.js
const app = createApp(App)
app.config.globalProperties.$appName = 'Vue3应用'
app.mount('#app')

在组件中访问

// 选项式 API
export default {mounted() {console.log(this.$appName) // Vue3应用}
}// 组合式 API
import { getCurrentInstance } from 'vue'setup() {const internalInstance = getCurrentInstance()console.log(internalInstance.appContext.config.globalProperties.$appName)
}

③:直接导入应用实例

// main.js
const app = createApp(App)
app.mount('#app')
export { app }// 组件中
import { app } from '@/main'
setup() {console.log(app.config.globalProperties.$appName)
}

***在vue2中,我们可以通过this.$root直接访问根实例。

***在vue3中,推荐使用provide/inject机制替换直接访问根实例

4.如何定义vue的动态路由,并获取传递过来的参数

①:定义动态路由

在Vue Router中,动态路由通常是指路径中包含可变部分的路由,这些可变部分通常用于传递参数。定义动态路由的方法是在路径中使用冒号标记参数。

const routes = [// 动态路径参数以冒号开头{ path: '/users/:id', component: UserComponent },//?标记可选参数{ path: '/users/:id?', component: UserComponent },// 可以定义多个参数{ path: '/users/:username/posts/:postId', component: UserPostComponent }
]

②:获取动态路由参数

  • 选项式API中,通过this.$root.params访问
export default {mounted() {// 获取路由参数console.log(this.$route.params.id)}
}
  • 组合式API中。使用useRoute函数获得路由对象,然后访问其params属性
import { useRoute } from 'vue-router'export default {setup() {const route = useRoute()// 获取路由参数console.log(route.params.id)}
}
  • 在模板(template)中,直接使用$route.params访问
<template><div>User ID: {{ $route.params.id }}</div>
</template>

5.vue中的data属性能和methods中的方法名重名吗

不可以。因为他们最终都会被挂载到同一个组件实例上,共享同一个命名空间,如果重名,将会导致冲突。methods方法会覆盖掉data的同名属性。

  • vue实例属性的优先级顺序:props>methods>data>computed。如果出现重命名的现象,则优先级高的会覆盖掉优先级低的。
  • Vue前缀保留。Vue内部有一个带有特俗前缀的保留属性。如以$或_开头的属性,不会被代理到vue实例上,使用vm.$data._property访问这些属性

6.vue的自定义指令

允许我们对DOM底层进行操作。自定义指令通过v-前缀标识,用于元素插入到DOM后执行特殊操作。

①:在组合式API的<script setup>内定义

<script setup>
// 以 v 开头的驼峰命名变量会被识别为自定义指令
const vHighlight = {mounted: (el) => {el.classList.add('highlighted')}
}
</script><template><p v-highlight>这是高亮显示的文本</p>
</template>

②:在选项式API内,通过directives选项局部注册

export default {directives: {highlight: {mounted: (el) => el.classList.add('highlighted')}}
}

③:全局注册自定义组件,directive

const app = createApp({})app.directive('highlight', {mounted: (el) => el.classList.add('highlighted')
})

7.介绍vue的单向数据流和双向数据流

这是两个不同概念的东西。

①:单向数据流是一种设计理念,它指父组件向子组件传递数据时,数据只能从父组件流向子组件,子组件无法修改数据。通过props实现,所有props都遵循单向绑定机制。

②:双向数据流是指保持数据和视图的一致。当数据发生变化时,视图自动更新。在vue中主要通过v-model实现,相当于v-bind和@inpute的语法糖。

8.created和mounted生命周期钩子函数的区别

执行时机

created是组件实例创建完成后立即调用。此时组件还未挂载到DOM上。

mounted是组件实例挂载到DOM后调用。此时可以访问组件的DOM节点,进行DOM操作

9.如何是CSS样式只在当前组件内生效

①:使用scoped样式

使用scoped后,父组件的样式不会渗透到子组件内,不过一个子组件的根节点会同时收到它的父组件的 scoped css和子组件的scoped css的影响。

<style scoped>
.example {color: red;
}
</style>

②:在script标签内加入module特征

<style module>
.example {color: red;
}
</style>

然后在模板内通过$style引用

<template><div :class="$style.example">示例</div>
</template>

http://www.xdnf.cn/news/10548.html

相关文章:

  • unity随机生成未知符号教程
  • 字节跳动社招面经 —— BSP驱动工程师(5)
  • webfuture:如何屏蔽后台发文界面的保存为新文章按钮?
  • 使用 fastai 进行文本分类的简明指南 - Fastai Part 5
  • 【仿muduo库实现并发服务器】使用正则表达式提取HTTP元素
  • java基础学习(二十一)
  • oscp练习 PG Wombo
  • 「完整」AI文档库 | 5月20最新发布,221页,《北京大学AI+Agent与Agentic+AI的原理和应用洞察与未来展望》
  • ChatOn:智能AI聊天助手,开启高效互动新时代
  • pikachu靶场通关笔记09 XSS关卡05-DOM型XSS-X
  • 第18讲、Odoo接口开发详解:原理、类型与实践
  • 【软件测试】火狐驱动下载镜像
  • Golang学习之旅
  • linux驱动 - 5: simple usb device驱动
  • 小白的进阶之路系列之十----人工智能从初步到精通pytorch综合运用的讲解第三部分
  • CppCon 2014 学习:Exception-Safe Coding
  • [免费]微信小程序网上花店系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
  • Cesium快速入门到精通系列教程四:加载渲染GEOJSON数据
  • BA-SAM: 用于 Segment Anything 模型的可扩展偏置模式注意力掩码
  • vue-13(延迟加载路由)
  • Oracle的Hint
  • 2025/6月最新Cursor(0.50.5版本)一键自动更换邮箱无限续杯教程
  • Spring 5 响应式编程:构建高性能全栈应用的关键
  • 数据库系统概论(十二)SQL 基于派生表的查询 超详细讲解(附带例题表格对比带你一步步掌握)
  • MySQL-多表关系、多表查询
  • Qt OpenGL 相机实现
  • 机器学习算法:逻辑回归
  • 操作系统复习
  • 方法重写与方法重载详解
  • CSS之动画(奔跑的熊、两面反转盒子、3D导航栏、旋转木马)