以下是 Vue.js 面试常见问题列表。这些面试问题和答案是由在顶级跨国公司从事 Vue.js 工作的 JavaScript 专业人员准备的。
行业获得最好的工作非常有用和有帮助。
Vue.js 是一个渐进式的 JavaScript 框架,用于创建动态用户界面和单页应用程序。
Vue.js 之所以称为渐进式框架,是因为它在不断变化和发展。
Vue.js 还用于构建用户界面和单页应用程序,如 Angular。如今,它的发展非常迅速,并且随着时间的推移,新的库和扩展正在出现。
很多开发者社区都在使用 Vue.js,这种JavaScript 语言
的流行度与日俱增。这就是为什么它应该是 Angular 的潜在竞争对手。
Evan you 是 Vue.js 的创始人。创立 Vue.js 时,他在 Google 从事多个 Angular 项目。
VUE 资源是 Vue.js 的插件。该插件与 Vue.js 一起使用,用于发出 Web 请求和处理响应,其中使用了 XHMLHttpRequests 或 JSONP。
您可以使用以下 yarn 或 npm 命令安装 VUE-resource:
您可以使用以下 4 种方法在项目中安装 Vue.js:
您可以使用 Vue 函数创建一个新的 Vue 实例:
当你想启动一个 Vue 应用程序时,你必须创建一个新的 Vue 实例。
以下是使用 Vue.js 的优势列表:
体积非常小
Vue.js 的最大优势之一是体积非常小。这个令人兴奋的 JavaScript 插件只有 18-21KB,因此您可以非常轻松地立即下载和使用它。
易于理解和使用
Vue.js 的框架非常好理解,这也是这个框架流行的原因之一。由于结构简单,用户可以轻松地将 Vue.js 添加到他们的 Web 项目中并开发应用程序。
与现有应用程序的简单集成
Vue.js 框架可以很容易地与现有的应用程序集成。Vue.js 有很多组件。您可以将它与任何用 JavaScript 编写的应用程序集成。
灵活的性质
Vue.js 的灵活特性也使 React.js、Angular.js 和任何其他新 JavaScript 框架的开发人员易于理解。它为使用虚拟节点编写 HTML 文件、JavaScript 文件和纯 JavaScript 文件提供了很大的灵活性。
成分
您可以在 Vue.js 应用程序中创建可重用的自定义元素。
简单而全面的文档
很少,就可以开发应用程序或网页。
虚拟 DOM
Vue.js 使用类似于ReactJS
、Ember 等其他现有框架的虚拟 DOM。虚拟 DOM 是原始 HTML DOM 的轻量级内存树表示,并且在不影响原始 DOM 的情况下进行更新。
双向通信
Vue.js 通过其 MVVM 架构提供双向通信,这使得处理 HTML 块变得非常容易。
以下是一些在其部分项目和应用程序中使用 Vue.js的网站列表
在单向数据绑定或单向数据流中,应用程序的视图 (UI) 部分不会自动更新。在这个模型中,当数据模型发生变化时,需要编写一些自定义代码,使其在每次变化后都更新。v-bind 指令用于 Vue.js 中的单向数据流或绑定。
另一方面,在双向数据绑定中,应用程序的视图(UI)部分会在数据模型更改时自动更新。v-model 指令用于 Vue.js 中的两种数据绑定。
v-model 指令用于在Vue js 中创建双向绑定。在双向绑定中,数据或模型与 DOM 绑定,而 Dom 绑定回模型。
让我们看一个示例来演示如何实现双向绑定。
在 Vue.js 中,每个组件实例都有自己的隔离范围。因此,您不能直接引用子组件模板中的父数据。
道具用于将数据传递给子组件。道具是自定义属性。您可以在组件上注册。当一个值被传递给一个 prop 属性时,它就成为该组件实例上的一个属性。
Vue.js 中的 Mixin 是一组以特定方式存储的已定义逻辑。Mixin 可以重复使用以向您的 Vue 实例和组件添加功能。Mixin 很重要,因为它们提供了很多功能。以下是 Mixins 提供的功能列表:
VueX 是 Vue.js 应用程序的状态管理模式和库。它用作 Vue.js 应用程序中所有不同组件的集中存储。Vuex 提供了一些规则来确保状态只能以可预测的方式改变。通过将 Vuex 与 Vue.js 的官方 devtool 扩展集成,您可以获得许多附加功能。
过滤器是 Vue.js 组件提供的功能,允许您对动态模板数据应用格式和转换。过滤器用在两个地方,胡子插值和 v-bind 表达式。过滤器不会更改组件数据或任何内容,但它们只会影响输出。
以下是 Vue.js 中过滤器的主要用法列表:
是的,我们可以从 Vue.js 调用 Rest API。有几个 HTTP 库可用于从 Vue.js 调用 REST Api。流行的库之一是 Axios。它使用起来非常简单且重量轻。您可以使用以下命令将其包含在您的项目中。
您可以使用以下命令创建项目:
要运行您的项目,请运行以下命令:
执行上述命令后,将 index.html 和 /dist/ 文件夹复制到您的网站根目录,您的项目将被部署。
Vue-loader 是 Vue.js 中 webpack 的加载器模块,用于使用 .vue 文件格式编写单个文件组件。
单文件组件包含三个部分,称为模板、脚本和样式。webpack 可以使用单独的加载器模块(例如[]SASS或 SCSS 加载器)提取和处理每个部分。vue-loader 模块使静态资产被视为模块依赖项,并允许使用 webpack 加载器进行处理。
请参阅以下示例,该示例演示了如何在 Vue.js 中处理事件:
HTML 代码:
JS代码:
Vue.js 中有一组指令用于根据条件显示或隐藏元素。这些指令也称为条件指令。
v-if 指令: v-if 指令用于根据给定的表达式添加或删除 DOM 元素。例如,如果将 isLoggedIn 设置为 false,则下面的按钮将不会显示。
v-if 指令还便于您使用单个 v-if 语句控制多个元素,方法是使用条件将 元素中的所有元素包装起来。例如,您可以有条件地同时应用标签和按钮。
v-else 指令:v-else 指令仅用于在表达式相邻 v-if 设置为 false 时显示内容。这与任何编程语言中用于显示替代内容的 else 块相同,它前面是 v-if 或 v-else-if 块。您不需要为此传递任何值。例如,如果 isLoggedIn 设置为 false(未登录),则使用 v-else 显示登录按钮。
**v-else-if 指令:**当您想要检查两个以上的选项时,使用 v-else-if 指令。例如,如果你想在 ifLoginDisabled 属性设置为 true 时显示一些文本而不是 LogIn 按钮,你可以通过 v-else 语句来实现。
v-show 指令: v-show 指令类似于 v-if,但它会将所有元素呈现到 DOM,然后使用 CSS 显示属性来显示/隐藏元素。如果您希望元素经常打开和关闭,则首选此指令。
下面给出了 v-show 和 v-if 指令之间最常见的区别:
| 指数 | v-show 指令 | v-if 指令 |
| 1. | 仅当表达式通过时,v-if 指令才将元素呈现给 DOM。 | v-show 指令用于将所有元素渲染到 DOM,然后使用 CSS display 属性根据表达式显示/隐藏元素。 |
| 2. | v-if 指令还支持 v-else 和 v-else-if 指令。 | v-show 指令不支持 v-else 和 v-else-if 指令。 |
| 3. | v-if 指令具有更高的切换成本,因为它每次都添加或删除 DOM。 | v-show 指令具有更高的初始渲染成本。 |
| 4. | v-if 指令在初始渲染时间方面具有优势。 | 如果您必须频繁地打开和关闭元素,则 v-show 指令具有性能优势。 |
| 5. | v-if 指令支持选项卡。 | v-show 指令不支持选项卡。 |
为了更有效地渲染 DOM 元素,Vue.js 会重用这些元素,而不是每次都创建一个新元素。关键是一种标志,它告诉 Vue “如果与此子组件关联的数据被移动到其他地方,那么将组件连同它一起移动以保留已经存在的更改。”
建议不要在同一元素上同时使用 v-if 和 v-for 指令,因为 v-for 指令的优先级高于 v-if 指令。如果你同时使用这两个指令,那么有两种常见的情况可能很诱人:
Vue.js 中使用了以下类型的指令:
顾名思义,Vue.js 中的数组检测变异方法是用来修改原始数组的。以下是触发视图更新的数组变异方法列表:
当您对列表执行上述任何突变方法时,它会触发视图更新。
Vue.js 中的数组检测非变异方法是不变异原始数组但总是返回一个新数组的方法。
以下是非突变方法的列表:
例如,让我们看一个待办事项列表,它根据状态过滤器将旧数组替换为新数组:
通常,JavaScript 在事件处理程序中提供 event.preventDefault() 或 event.stopPropagation()。我们可以使用 Vue.js 方法,但这些方法是用于数据逻辑而不是处理 DOM 事件。
Vue.js 为 v-on 提供了以下事件修饰符,这些修饰符是用点符号表示的指令后缀。
请参阅以下停止修饰符的示例:
链修饰剂示例如下:
Vue.js 中使用的事件处理程序类似于纯 JavaScript。方法调用还支持特殊的 $event 变量。
例子:
我们可以通过全局 config.keyCodes 定义自定义键修饰符别名。以下是属性的一些准则:
请参阅示例:
Vue.js 支持以下修饰符来在我们按下相应键时触发鼠标或键盘事件监听器。支持的系统修改键列表是:
请参阅以下带有 click 事件的控件修饰符示例。
例子:
在 Vue.js 中,当全局注册看起来不理想时,需要进行本地注册。例如,假设您正在使用像 Webpack 这样的构建系统并全局注册所有组件。在这种情况下,即使我们停止使用某个组件,它仍然可以包含在您的最终构建中。这不必要地增加了用户必须下载的 JavaScript 数量。在这些情况下,最好将组件定义为纯 JavaScript 对象,如下所示:
之后定义您想在组件选项中使用的组件,如下所示:
Vue.js 支持以下鼠标按钮修饰符:
例子:
.right 修饰符的用法如下:
以下是 Vue.js 中 v-model 指令支持的三个修饰符:
在 Vue.js 2.x 版本中,当模板有多个元素时,每个组件都必须有一个根元素。在这种情况下,您需要用父元素包装元素。
否则,它会显示一个错误,说“组件模板应该只包含一个根元素”
Vue.js 3.x 版本有助于组件现在可以有多个根节点。这种添加多个根节点的方式称为片段。
Vue.js 中组件的全局注册方便我们在注册后创建的任何根 Vue 实例(新 Vue)的模板中使用。
在全局注册中,使用 Vue.component 创建的组件如下:
我们可以在 vue 实例中全局注册多个组件,
以上组件可以在vue实例中使用如下:
在 Vue.js 中,使用 v-for 指令是因为它允许我们遍历数组或对象中的项目。通过使用该指令,我们可以迭代数组或对象中的每个元素。
Array 中的 v-for 指令用法示例:
我们也可以使用分隔符代替 in,类似于 JavaScript 迭代器。
对象中的 v-for 指令用法示例:
Vue.js 总是帮助我们尽可能高效地渲染元素。因此,可以重用元素,而不是从头开始构建它们。但这会在少数情况下产生问题。例如,如果您尝试在 v-if 和 v-else 块中呈现相同的输入元素,那么它会保留先前的值,如下所示:
在上述情况下,我们不应该重用它。最好通过应用 key 属性将两个输入元素分开,如下所示:
在上面的示例中,两个输入都是独立的,不会相互影响。
建议使用指令的关键属性来跟踪每个节点的身份,从而重用和重新排序现有元素。我们必须在 v-for 迭代中为每个项目提供一个唯一的键属性。键的理想值是每个项目的唯一 ID。
例子:
这就是为什么总是建议尽可能使用 v-for 提供一个键,除非迭代的 DOM 内容很简单。
不改变原始数组但总是返回一个新数组的方法称为非变异方法。
以下是非突变方法的列表:
让我们举个例子来更好地理解它。我们有一个待办事项列表,根据状态过滤器将旧数组替换为新数组。
例子:
由于 Vue.js 的实现,这种方法不会重新渲染整个列表。
在 Vue.js 中,如果你使用的是 vue-router,你应该使用 router.go(path) 来导航到任何特定的路由。您可以使用 this.$router 从组件内访问路由器。router.go() 在 Vue.js 2.0 中更改。您现在可以使用 router.push({ name: “yourroutename”}) 或仅使用 router.push(“yourroutename”) 进行重定向。
在 Vue.js 中, 元素用作内容的分发渠道。
让我们举个例子来创建一个带有用于插入内容的槽的警报组件。
例子:
在 Vue.js 中, 元素用作内容的分发渠道。
让我们举个例子来创建一个带有用于插入内容的槽的警报组件。
例子:
我们可以插入动态内容如下:
在 Vue.js 中,单文件组件用于解决带有 .vue 扩展名的 JavaScript 驱动应用程序中的常见问题。
以下是 Vue.js 中的单文件组件解决的问题列表:
<
定义过滤器的方法有两种:
**本地过滤器:**您可以在组件的选项中定义本地过滤器。在这种情况下,过滤器适用于该特定组件。
**全局过滤器:**你也可以在创建 Vue 实例之前全局定义一个过滤器。在这种情况下,filter 适用于 vue 实例中的所有组件,
在 Vuex 应用程序中,每当我们想要访问 store 的 state 属性或 getter 时创建一个计算属性将是重复的、困难的和无聊的,尤其是当一个组件需要多个 state 属性时。在这种情况下,我们可以使用 vuex 的 mapState 助手,它为我们生成计算的 getter 函数。
在下面的增量示例中,我们演示了 mapState 助手:
state => state.username
this
, a normal function must be used当映射计算属性的名称与状态子树名称相同时,您还可以将字符串数组传递给 mapState
以下是 stylelint 最突出的功能列表:
在 Vue.js 中,单文件组件是具有 .vue 扩展名的文件,其中包含 Vue 组件。单文件组件由组件的模板、逻辑和样式组成,所有这些都捆绑在一个文件中。它还包含一个
要在 Vue.js 中使用单文件组件,我们必须设置 Vue Loader 来解析文件(它作为 webpack 构建管道的一部分自动完成)。它还支持非默认语言,例如带有可插入预处理器的 Sass 或 HTML 模板语言。
在 Vue.js 中,$parent 属性用于从子级访问父级实例。它类似于 r o o t 属 性 。 root 属性。 root属性。parent 属性提供直接访问,但它使应用程序难以测试和调试。在这个属性中,很难找出突变的来源。
在 Vue.js 中,$child 属性就像 $parent 属性,但它用于访问子实例。
如果是用于直接访问组件的属性,则为 ref。尽管有 props 和 events,如果你想直接访问子组件,你可以使用 ref 属性为子组件分配一个引用ID
例子:
现在您可以使用this.$refs.usernameInput,我们必须在组件中定义这个 ref。
您应该避免从模板或计算属性中访问 $refs,因为 $refs 仅在组件渲染后才会填充,并且它们不是响应式的。
在 Vue.js 应用程序中,内存泄漏通常来自使用创建自己的实例和/或操作 DOM 的第三方库。v-if 指令和 Vue 路由器会破坏 Vue 组件实例。要克服这个问题,请在组件被销毁之前执行清理操作。它应该在 beforeDestroy() 生命周期钩子中手动完成。
例如,假设我们的组件中有一个名为 PowerGraph.js 的虚构库。它创建了一个在页面上显示一些数据的图形实例:
在这里,我们必须调用图实例的**destroy()**方法或实现我们自己的清理方法:
如果我们在组件被销毁之前不进行清理操作,那么该内存将永远不会被释放,这将是内存泄漏。
当在 Vue.js 中创建一个 Vue 实例时,它会在创建后经历一系列步骤。首先,它们被创建然后安装,然后在最后被销毁。在此过程中,它还运行称为生命周期挂钩的功能。这些生命周期挂钩允许开发人员在特定阶段添加自己的代码。
以下是 Vue 实例经过的所有事件或挂钩的列表:
**beforeCreate 事件:**这是创建过程中发生的第一个事件或钩子。它有助于开发人员在组件添加到 DOM 之前执行操作。我们无法访问此事件内部的 DOM。
**created 事件:**该事件用于在创建实例后运行代码。它方便您访问响应式数据,但尚未完成模板和 Virtual DOM 的挂载或渲染。
beforeMount 事件: beforeMount 事件用于在初始渲染发生之前以及模板或渲染函数编译之后执行。这是很少使用的事件,在大多数情况下,您不需要使用此事件。
**挂载事件:**这是最常用的事件或钩子。在这种情况下,您可以完全访问响应式组件、模板和渲染的 DOM。
**beforeUpdate 事件:**此事件在组件上的数据更改和更新周期开始之前执行。它在 DOM 被修补和重新渲染之前运行。
**updated:**该事件用于在组件上的数据发生变化并且 DOM 重新渲染后执行。如果您想在属性更改后访问 DOM,这是完成此操作的最佳位置。
**beforeDestroy:**此事件用于在拆除实例之前执行。这是 Vue 实例生命过程的最后第二步,如果你必须这样做,它是清理事件或响应式订阅的正确位置。
**销毁:**这是 Vue 实例生命过程的最后一步,用于在最后一分钟进行清理。
下图展示了 Vue Instance 的完整生命周期:
[图片上传失败…(image-386395-1657503532932)]
Vue.js 的官方路由器称为 Vue Router。它默认与 Vue.js 核心集成,用于使用 Vue.js 构建单页应用程序。
以下是 Vue Router 的重要特性列表:
在 Vue.js 中,插槽是子组件中的占位符,其中填充了从父组件传递的内容。
**在 slot 中,**组件在父组件的作用域中编译,然后传递给子组件。因此,不能在插槽的内容中使用子组件属性。
**在 Scoped 插槽中,**您可以将子组件数据传递给父范围,然后在插槽内容中使用它。
在 Vue.js 中,虚拟 DOM 是树状数据结构或表示 DOM 节点的 JavaScript 对象的集合。Vue.js 管理虚拟 DOM 的节点,并且应该在页面上呈现。这些对象称为“虚拟节点”或 VNode。
虚拟 DOM 的主要目的是使 DOM 操作更快更高效。当 DOM 中有很多节点时,它变得非常重要。在这种情况下,更新这些节点对于所需的处理能力和资源来说是一项非常昂贵的任务。在这里,虚拟 DOM 开始发挥作用,使 JavaScript 对象的速度显着加快。Vue.js 自动批量组织 DOM 更新以提高效率。
在 Vue.js 中,数据使用 prop 或自定义属性从父组件传递给子组件。此自定义属性成为子组件实例的属性。此过程称为单向数据流。
一旦父组件更新了一个 prop 值,子组件就会自动更新。子组件可以通过事件与父组件进行通信,但不应更改子组件内的属性。它也不会影响父组件,除非它是一个对象或数组。当子组件实例发出事件时,父组件会为该事件分配一个处理程序,并将数据传递回父组件。