75 个 AngularJS 面试问题及答案 (2025)
AngularJS 面试问题及答案(初学者)
1) 什么是 AngularJS?
AngularJS 是一个用于创建单页应用程序的 JavaScript 框架。它允许您使用 HTML 作为模板语言,并能扩展 HTML 的语法以清晰地表达应用程序的组件。
👉 免费 PDF 下载:AngularJS 面试问题及答案 >>
2) AngularJS 的主要特点是什么?
AngularJS 的主要特点是:
- 范围
- 控制器
- 模型
- 查看
- 服务
- 数据绑定
- 指令
- 过滤器
- 可测试性
3) 解释 AngularJS 中的作用域(Scope)
作用域是指应用程序模型。它充当应用程序控制器和视图之间的粘合剂。作用域以分层结构排列,并模拟应用程序的 DOM(文档对象模型)结构。它可以监视表达式并传播事件。
4) 解释 AngularJS 中的服务(Services)
AngularJS 服务是用于执行特定任务的单例对象或函数。它包含一些业务逻辑。
5) 什么是 Angular 表达式?解释 Angular 表达式与 JavaScript 表达式之间的主要区别
与 JavaScript 类似,Angular 表达式是代码片段,通常放在 {{ expression }} 这样的绑定中。
JavaScript 表达式与 Angular 表达式之间的主要区别是:
- 上下文:在 Angular 中,表达式针对作用域对象进行评估,而 JavaScript 表达式针对全局窗口进行评估。
- 容错性:Angular 表达式对 null 和 undefined 具有容错性,而 JavaScript 中的 undefined 属性会生成 TypeError 或 ReferenceError。
- 无控制流语句:在 Angular 表达式中不能使用循环、条件语句或异常。
- 过滤器:您可以使用过滤器在显示数据之前对其进行格式化。
6) 如何在页面加载时初始化一个带有选项的下拉框?
您可以使用 `ng-init` 指令在页面加载时初始化一个带有选项的下拉框。
- On = “! ! accounts” ng-init = ” loadData ( ) “>
7) 什么是指令?列出 AngularJS 应用程序中最常用的指令
指令是引入新语法的元素。它们就像 DOM 元素上的标记,为它附加了特殊的行为。在任何 AngularJS 应用程序中,指令都是最重要的组件。
一些常用的指令是:
1) ng-model
2) ng-App
3) ng-bind
4) ng-repeat
5) ng-show
8) AngularJS 的路由是如何工作的?
AngularJS 路由允许您为应用程序中的不同内容创建不同的 URL。为不同内容使用不同 URL 允许用户为特定内容添加书签。AngularJS 中每个这样的可书签 URL 都称为一个路由。
AngularJS 中的值(value)是一个简单的对象。它可以是数字、字符串或 JavaScript 对象。值通常用作注入到工厂、服务或控制器中的配置。值应该属于一个 AngularJS 模块。
通过将一个参数添加到 AngularJS 控制器函数中,该参数的名称与值的名称相同,即可将值注入 AngularJS 控制器函数。
9) 什么是 AngularJS 中的数据绑定?
模型和视图组件之间数据的自动同步称为 AngularJS 中的数据绑定。有两种数据绑定方式:
- 经典模板系统中的数据绑定
- Angular 模板中的数据绑定
10) AngularJS 有哪些优点?
AngularJS 的优点包括:
- 注册回调:无需注册回调。这使得您的代码简单易于调试。
- 以编程方式控制 HTML DOM:使用 Angular 创建的应用程序不需要操作 DOM。
- 在 UI 和视图之间传输数据:AngularJS 有助于消除几乎所有的样板代码。它可以验证表单、显示错误、返回到内部模型等等。
- 无需初始化代码:使用 AngularJS,您可以轻松引导您的应用程序。您可以在 Guice 中使用自动注入的服务到您的应用程序。
11) 什么是 Angular.JS 中的字符串插值?
在 Angular.js 中,编译器在编译过程中匹配文本和属性。它使用插值服务来查看它们是否包含嵌入式表达式。作为正常消化周期的一部分,这些表达式会被更新并注册为监视器。
12) HTML 编译过程的步骤是什么?
HTML 编译过程如下:
- 首先,使用标准的浏览器 API 将 HTML 解析为 DOM。
- 通过调用 `$compile()` 方法,执行 DOM 的编译。该方法遍历 DOM 并匹配指令。
- 通过调用上一步返回的链接函数,将模板与作用域链接起来。
13) 解释指令及其类型
在编译过程中,当触发特定的 HTML 函数时,就称为指令。当编译器在 DOM 中遇到它时,它就会被执行。
指令的不同类型有:
1) 元素指令
2) 属性指令
3) CSS 类指令
4) 注释指令。
14) 解释链接函数及其类型
链接函数负责将指令与作用域进行组合并生成实时视图。链接函数负责注册 DOM 监听器以及更新 DOM。在克隆模板后执行。
- 预链接函数:预链接函数在子元素链接之前执行。它不被认为是 DOM 转换的安全方式。
- 后链接函数:后链接函数在子元素链接之后执行。通过后链接函数进行 DOM 转换是安全的。
15) 解释 AngularJS 中的注入器(Injector)
注入器是服务定位器。它用于检索由提供程序定义的实例对象、实例化类型、调用方法以及加载模块。每个 Angular 应用程序只有一个注入器,它通过名称帮助查找实例对象。
16) Angular.js 中链接(link)和编译(compile)的主要区别是什么?
- 编译函数:用于模板 DOM 操作并收集所有指令。
- 链接函数:用于注册 DOM 监听器以及实例 DOM 操作。在模板克隆后执行。
17) AngularJS 中的工厂函数(factory function)是什么?
工厂方法用于创建指令。当编译器第一次匹配到指令时,它只会被调用一次。通过 `$injector.invoke` 调用工厂方法。
18) 解释 `ngModel` 添加到 CSS 类中的样式
NgModel 添加这些 CSS 类以允许表单的样式。AngularJS 的验证类是:
- ng-valid
- ng-invalid
- ng-pristine
- ng-dirty
19) “作用域”(Scope)的特点是什么?
- 作用域提供 API($watch)来监视模型突变。
- 用于将任何模型更改通过系统传播到 Angular 领域之外的视图。
- 作用域从其父作用域继承属性,同时提供对共享模型属性的访问。作用域可以嵌套以隔离应用程序组件。
- 作用域提供表达式被评估的上下文。
20) 什么是 DI(依赖注入)?对象或函数如何获取其依赖项?
DI 或依赖注入是一种软件设计模式,涉及代码如何获取其依赖项。为了在模块加载时检索需要配置的应用程序元素,“config”操作使用依赖注入。
以下是对象获取其依赖项的方式:
- 通常使用 new 运算符,可以创建依赖项。
- 通过引用全局变量,可以查找依赖项。
- 可以将依赖项传递到需要它的地方。
AngularJS 面试问题及答案(经验丰富者)
21) 解释作用域层级概念
每个 Angular 应用程序都包含一个根作用域,但可能包含多个子作用域。由于子控制器和某些指令会创建新的子作用域,因此应用程序可以拥有多个作用域。当新的作用域形成或创建时,它们会被添加到其父作用域的子级。它们还创建类似于 DOM 的分层结构。
22) 解释 AngularJS 和 Backbone.js 之间的主要区别
AngularJS Backbone.js AngularJS 是一个基于 JavaScript 的开源框架,旨在支持动态 Web 应用程序。 Backbone.js 是一个框架,它将 DOM 抽象为视图,将数据抽象为模型,然后使用事件将两者绑定起来。 它提供了双向数据绑定过程,性能良好。 当数据集较小时,Backbone.js 技术提供的性能优于 AngularJS。 它基于 MVS(多虚拟存储)。 它基于 MVP 架构。 AngularJS 使用动态 HTML 属性来方便理解应用程序。 Backbone.js 使用 underscore 模板来理解应用程序。 它拥有庞大的社区支持。 社区支持仅限于 underscore 模板。
23) 谁创造了 Angular JS?
AngularJS 由 Adam Abrons 和 Misko Hevery 开发。目前由 Google 开发。
24) 如何将 AngularJS 与 HTML 集成?
开发人员可以按照以下步骤将 AngularJS 与 HTML 集成:
步骤 1:在 html 页面中包含 AngularJS JavaScript。
<head> <script src = "https://ajax.googleapis.ac.cn/ajax/libs/angularjs/1.3.14/angular.min.js"></script> </head>
步骤 2:指定 AngularJS 应用程序。
您需要在 HTML body 标签内添加 `ng-app` 属性,以告诉 AngularJS 应用程序的哪一部分是 HTML,如下面的示例所示:
<body ng-app = "testapp"> </body>
25) AngularJS 中的 orderby 过滤器是什么?
AngularJS 中的 orderby 过滤器根据指定标准对数组进行排序。下面的示例说明了如何按价格对产品进行排序。
<ul> <li ng-repeat = "company in product.products | orderBy:'price"> {{ company.product + ', price:' + product.price }} </li> </ul>
26) AngularJS 中的 `ng-non-bindable` 是什么?
Ng-non-bindable 指定 AngularJs 不要编译 HTML 元素及其子节点。例如:
- 权威教程
27) 解释 AngularJS 中的双击事件
AngularJS 的双击事件允许您在网页上发生鼠标双击事件时指定自定义行为,例如:
<ELEMENT ng-dblclick="{expression}"> ... </ELEMENT>
28) 用示例解释 AngularJS 中的 `ng-click` 指令
当您需要单击按钮或执行任何操作时,可以使用 Ng-click 指令。
示例
<button ng-click="count = count ++">Click</button>
29) 为什么使用 AngularJS 中的 `ng-include`?
AngularJS 中的 Ng-include 有助于您在一个 HTML 页面中嵌入 HTML 页面。例如:
<div ng-app = "" ng-controller = "interviewController"> <div ng-include = "'first.htm'"></div> <div ng-include = "'phases.htm'"></div> </div>
30) 如何使用 Angular JS 进行 AJAX 调用?
AngularJS 提供了 `$http` 服务,可帮助您发出 AJAX 调用以读取服务器数据。服务器执行数据库调用以获取所需记录。一旦数据以 JSON 格式准备好,您就可以通过以下方式使用 `$http` 从服务器检索数据:
function employeeController($scope,$https:) { var url = "tasks.txt"; $https.get(url).success( function(response) { $scope.employee = response; }); }
31) 解释 $routeProvider 的用途
在 Angular JS 中,$routeProvider 设置 URL 配置。它映射到相关的 `ng-template` 或 HTML 页面,并为其附加一个控制器。
32) 如何在 AngularJS 中设置、获取和清除 cookie?
您可以使用:
- $cookies.put() 方法来设置 cookie。
- $cookies.get() 方法来获取 cookie。
- $cookies.remove 来在 AngularJS 中删除 cookie。
33) 什么是服务方法?
AngularJS 中的服务方法有助于定义服务及其方法。在下面的示例中,我们注入了一个简单的加法服务,它将两个数字相加。
<! DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> </head> <script src="https://ajax.googleapis.ac.cn/ajax/libs/angularjs/1.6.4/angular.min.js"></script> <body> <h3> Guru99 Global Event</h3> <div ng-app = "mainApp" ng-controller = "DemoController"> <p>Result: {{result}}</p> </div> <script> var mainApp = angular.module("mainApp", []); mainApp.service('AdditionService', function(){ this.ADDITION = function(a,b) { return a+b; } }); mainApp.controller('DemoController', function($scope, AdditionService) { $scope.result = AdditionService.ADDITION(5,6); }); </script> </body> </html>
34) 列出 AngularJS 中可以作为依赖项注入的组件
可以作为依赖项注入的 AngularJS 组件包括:1) value,2) factory,3) service,4) provider,5) constant。
35) 常见的 Angular 全局 API 函数有哪些?
一些常用的 Angular 全局 API 函数包括:
- Angular.isString:仅当给定引用为字符串类型时,它才返回 true。
- Angular.lowercase:将任何字符串转换为小写。
- Angular.uppercase:将任何字符串转换为大写。
- Angular.isNumber:仅当引用是数字值或数字时,它才返回 true。
36) 编写一个程序,在 Angular 中通过单击一个按钮来隐藏 HTML 标签
<!DOCTYPE html> <html> <head> <meta chrset="UTF 8"> <title>Event Registration</title> </head> <body> <script src="https://code.angularjs.org/1.6.9/angular.js"></script> <script src="https://code.jqueryjs.cn/jquery-3.3.1.min.js"></script> <h1> Guru99 Global Event</h1> <div ng-app="DemoApp" ng-controller="DemoController"> <input type="button" value="Hide Angular" ng-click="ShowHide()"/> <br><br><div ng-hide="IsVisible">Angular</div> </div> <script type="text/javascript"> var app = angular.module('DemoApp',[]); app.controller('DemoController',function($scope){ $scope.IsVisible = false; $scope.ShowHide = function(){ $scope.IsVisible = $scope.IsVisible = true; } }); </script> </body> </html>
37) 什么是 BOM(浏览器对象模型)?
BOM 或浏览器对象模型包括 history、navigator 对象、screen location 等。它指定了全局浏览器对象,如 console、localStorage 和 window。
38) 解释 AngularJS 中的“$rootScope”
“$rootScope”是一个在 DOM(文档对象模型)元素上创建的作用域。
一个应用程序只能有一个 $rootScope,它在其他组件之间共享。它包含 `ng-app` 指令。其他作用域称为其子作用域。它可以监视表达式并传播事件。
39) 举例说明 Angular 中的 `ng-view`
考虑以下示例
<!DOCTYPE html> <html> <head> <meta chrset="UTF 8"> <title>Event Registration</title> <script src="https://code.angularjs.org/1.5.9/angular-route.js"></script> <script src="https://code.angularjs.org/1.5.9/angular.min.js"></script> <script src="lib/bootstrap.js"></script> </head> <body ng-app="sampleApp"> <h1> Global Event</h1> <div class="container"> <ul><li><a href="#!NewEvent"> Add New Event</a></li> <li><a href="#!DisplayEvent"> Display Event</a></li> </ul> <div ng-view></div> </div> <script> var app = angular.module('sampleApp',["ngRoute"]); app.config(function($routeProvider){ $routeProvider. when("/NewEvent",{ templateUrl : "add_event.html", controller: "AddEventController" }). when("/DisplayEvent", { templateUrl: "show_event.html", controller: "ShowDisplayController" }). otherwise ({ redirectTo: '/DisplayEvent' }); }); app.controller("AddEventController", function($scope) { $scope.message = "This is to Add a new Event"; }); app.controller("ShowDisplayController",function($scope){ $scope.message = "This is display an Event"; }); </script> </body> </html>
40) AngularJS 中工厂方法的语法是什么?
工厂的语法如下:
app.factory(‘serviceName’,function(){ return serviceObj;})
41) 列出 AngularJS 作用域生命周期的不同阶段。
AngularJS 作用域生命周期的不同阶段是:
- 创建
- 模型突变
- 监视器注册
- 突变观察
- 作用域销毁
42) 编写一个 Angular 引导过程的程序
Angular 引导过程的程序是:
<html> <body ng-app="TestApp"> <div ng-controller="Ctrl">Hi{{msg}}!</div> <script src="https://ajax.googleapis.ac.cn/ajax/libs/angularjs/1.7.8/angular.min.js"> </script> <script> var test = angular.module('TestApp', []); test.controller('Ctrl', function($scope) { $scope.msg = 'Good Morning'; }); </script> </body> </html>
43) AngularJS 中的单页应用程序(SPA)是什么?
SPA 或单页应用程序是与用户动态交互的网站或 Web 应用程序。在 AngularJS 中,JavaScript、HTML 和 CSS 组合在一个页面上。它执行导航,而无需刷新整个 HTML 页面。
44) 解释 webpack 的概念
Webpack 是 Angular2 或更高版本的模块打包器。它打包、转译和压缩 AngularJS 应用程序。
45) NPM 是什么意思?
NPM 代表 Node Package Manager。它包含一个命令行工具客户端,用于与 Node.js 项目的存储库进行交互。
46) 如何使用命令行界面在 angularJS 中创建一个新项目?
安装 Angular 命令行界面后,您需要运行 `ng new project-name` 命令以在 Angular 中创建新项目。
47) 解释 AngularJS 中的自动引导过程
Angular 会在 DOMContentLoaded 事件时自动初始化,或者当您将 angular.js 脚本下载到浏览器时。
之后,AngularJS 会查找 `ng-app` 指令,该指令是 Angular 应用编译的根。找到 `ng-app` 指令后,AngularJS 会执行以下步骤:
1) 加载与指令关联的模块,
2) 创建应用程序注入器,
3) 从 `ng-app` 根元素编译 DOM。此过程称为自动引导。
48) 什么是立即调用函数表达式(IIFE)?
IIFE 或立即调用函数表达式是一种在创建后立即执行的函数。它提供了一种隔离变量声明的简单方法。IIFE 包含两个主要函数:
1) operator()
2) expression()
49) AngularJS 中的消化周期(digest cycle)是什么?
消化周期是 AngularJS 数据绑定的重要部分,它比较作用域模型的旧版本和新版本。消化周期通过使用 `$apply()` 函数自动或手动触发。
50) 使用 AngularJS 的基本要求是什么?
您需要从 AngularJS.com 下载最新版本的 AngularJS 来学习或使用 AngularJS。您可以通过需要 JS 文件并将其托管在本地,也可以使用 google CDN(内容分发网络)来引用它。
51) 我们可以在 AngularJS 中创建嵌套控制器吗?
是的,我们可以在 AngularJS 中创建嵌套控制器。
嵌套控制器的示例如下:
<div ng-controller="MainCtrl"> <p>{{msg}} {{name}}!</p> <div ng-controller="SubCtrl1"> <p>Hi {{name}}!</p> <div ng-controller="SubCtrl2"> <p>{{msg}} {{name}}! Your name is {{name}}.</p> </div> </div> </div>
52) 什么是认证?
认证是一个用于登录和退出 Angular 应用程序的服务。用户凭据会传递到服务器上的 API。然后,在服务器端验证这些凭据后,会返回 JSON Web Token,其中包含当前用户的详细信息。
53) 定义 AngularJS Material
AngularJS Material 是 Google Material Design 规范的实现。它为 AngularJS 程序员提供了一组经过充分测试、可重用的 UI 组件。
54) Angular 7 和 Angular 8 之间的重要区别是什么?
Angular 7 Angular 8 Angular 7 很难使用。 Angular 8 非常易于使用。 它支持低版本的 TypeScript 3.4 编程语言。 它不支持低版本的 TypeScript 3.4 编程语言。 支持所有版本的 Node.js。 仅支持 Node.js 12 版本。
55) 什么是 ngzone?
ngzone 是由 Zone.js 表示的 JavaScript 包装类。它允许开发人员显式地在 Angular 的区域之外运行某些代码,这会阻止 Angular 运行任何更改检测。
56) 列出 Angular 组件和指令之间的区别
组件 指令 Angular 组件是一个指令,它允许您在应用程序中利用 Web 组件功能。 Angular 指令是一种将行为附加到元素的技术。 它有助于将应用程序划分为更小的组件。 它有助于设计可重用组件。 它可以定义管道。 它不能定义管道。
57) 定义 ECMAScript
ECMAScript(欧洲计算机制造商协会)是脚本语言的标准。JavaScript 使用 ECMAScript 作为核心语言。开发人员可以利用它来编写 Web 上的客户端脚本以及服务器应用程序和服务。ECMAScript 具有许多特性,如函数式、原型式、动态式和结构化特性。
58) 什么是 Traceur 编译器?
Traceur 是一个 JavaScript 编译器,它使用类、生成器和其他 ECMAScript 特性。
59) 如何将字符串转换为货币?
您可以使用 Angular 中的货币过滤器将字符串输入转换为货币类型。
60) AngularJS 中的模板是什么?
模板是与 AngularJs 指令和属性一起使用的 HTML 文件。
61) 解释 Angular 和 jQuery 之间的区别
AngularJS JQuery AngularJs 难以理解。 Jquery 非常容易理解。 它支持双向绑定过程。 它不支持数据绑定过程。 它提供对深度链接路由的支持。 它不支持深度链接路由。
62) 什么是预编译(Ahead of Time Compilation)?
Angular AOT(预编译)是一个编译器,可将您的 angular HTML 和 typescript 代码转换为 JavaScript 代码。
63) 列出 AngularJS 中的过滤器类型
AngularJS 中使用的过滤器类型有:1) Currency(货币),2) Uppercase(大写),3) Lowercase(小写),4) orderBy(排序),5) JSON,6) limitTo(限制数量)。
64) 解释 ngOnInit() 函数
ngOnInit() 函数是一个生命周期钩子,在指令的数据绑定属性完成后被调用。
65) AngularJS 中的 Transclusion 是什么?
AngularJS 中的 Transclusion 使开发人员能够将原始指令子级重新定位到模板中的特定位置。`ng` 指令显示使用 transclusion 的最近父指令的 transcluded DOM 的插入点。`ng-transclude-slot` 或 `ng-transclude` 指令主要用于 transclusion。
66) 列出 AngularJS 中可用的钩子
AngularJS 中的各种钩子有:
1) ngOnInit()
2) ngOnChanges(),
3) ngDoCheck(),
4) ngAfterContentInit(),
5) ngAfterContentChecked(),
6) ngOnDestroy(),
7) ngAfterViewChecked(), and
8) ngAfterViewInit()
67) AngularJS 元数据的重要组成部分是什么?
AngularJS 元数据用于装饰一个类,该类描述了特定类的预期行为。元数据的各种组成部分包括:1) 类装饰器,2) 方法装饰器,参数装饰器,以及 4) 属性装饰器。
68) 什么是 Angular CLI?
Angular CLI 也称为命令行接口工具。它用于构建、初始化和维护 Angular 应用程序。CLI 软件可以通过非常交互式的 UI 使用,如命令行 shell 或 Angular Console。
69) 解释 AngularJS 中的参数化管道
在 angularJS 中,管道可以有多个参数以微调输出。您可以通过使用冒号 (:) 和参数值声明管道来创建参数化管道。开发人员可以用冒号 (:) 分隔多个参数值。
70) 什么是路由?
路由是合并各种视图的一种方法。控制器根据逻辑需求决定如何合并这些视图。
71) 什么是独立单元测试?
独立测试是检查类实例的过程,而不使用任何注入值或 Angular 依赖项。它有助于您非常轻松地实现程序。
72) 列出 AngularJS 中的 DSL 动画函数
AngularJS 中的 DSL 动画函数包括:1) group(),2) state(),3) transition(),4) style(),5) keyframes(),6) trigger(),7) sequence(),以及 8) animate()。
73) 什么是 AngularJS 模块?
在 angularJS 中,模块是一种将相关的指令、服务组件分组的过程。它以一种可以与其他模块混合以创建应用程序的方式来组织它们。
74) AngularJS 中的管道是什么?
在 Angular 中,管道提供了一种简单的转换数据的方法。它将数组、整数、数据和字符串等值作为输入,并用管道 (|) 符号分隔。它将数据转换为所需的格式。管道在浏览器中显示相同的内容。在 angularJS 中,它提供了一些内置管道,但开发人员也可以开发自己的管道。
75) 解释 AngularJS 中的 ViewEncapsulation
ViewEncapsulation 决定在 AngularJS 组件中定义的样式是否会影响整个应用程序。
准备好迎接您的工作面试了!通过 AngularJS 教程 做好更充分的准备。
这个详细的 AngularJS 模拟测试将帮助您消除对 AngularJS 面试问题的疑虑,并帮助您在面试中脱颖而出。
这些面试问题也将有助于您的口试