📅  最后修改于: 2020-12-24 10:17:48             🧑  作者: Mango
下面列出了最常见的AngularJS面试问题和答案。
AngularJS是一个开放源代码的JavaScript框架,用于构建功能丰富且可扩展的Web应用程序。它由Google开发,并遵循MVC(模型视图控制器)模式。它支持HTML作为模板语言,并使开发人员能够创建扩展的HTML标签,这将有助于更清楚地表示应用程序的内容。从HTML文档更新和接收信息很容易。它还有助于编写可在客户端进行测试的适当的可维护体系结构。
AngularJS的一些主要优点如下:
AngularJS有一些缺点,如下所示:
AngularJS基于MVC框架,其中MVC代表Model-View-Controller 。 MVC执行以下操作:
例如,可以将$ scope定义为模型,而用角度控制器编写的函数会修改$ scope,HTML会显示scope变量的值。
$ scope是一个对象,代表Angular应用程序的应用程序模型。
每个AngularJS应用程序只能具有一个根范围,但可以具有多个子范围。例如:
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.carname = "Volvo";
});
$ scope对象的一些关键特征如下:
AngularJS是具有主要功能的JavaScript框架,例如模型,双向绑定,指令,路由,依赖项注入,单元测试等。另一方面,JQuery是用于DOM操作的JavaScript库,没有双向绑定功能。
IDE一词代表集成开发环境。下面给出了一些用于AngularJS开发的IDE:
AngularJS的一些重要功能如下:
指令是DOM元素上的标记,用于指定该DOM元素上的行为。所有AngularJS指令均以单词ng开头。 AngularJS中有很多内置指令,例如“ ng-app ”,“ ng-init ”,“ ng-model ”,“ ng-bind ”,“ ng-repeat ”等。
让我们看一个简单的AngularJS指令示例:
Enter your Name:
Hello !
List of Countries with locale:
-
{{ 'Country: ' + country.name + ', Locale: ' + country.locale }}
控制器是JavaScript函数,用于向HTML UI提供数据和逻辑。它充当服务器和HTML UI之间的接口。每个控制器都接受$ scope作为参数,该参数表示控制器将要控制的应用程序/模块。例如:
AngularJS控制器用于:
数据绑定是模型和视图之间的数据自动同步。在AngularJS中,它执行模型和视图之间的自动同步过程。
如果更改了模型,则视图会自动反映出来,反之亦然。 AngularJS支持两种数据绑定方式:
服务是可用于在整个应用程序中存储和共享数据的对象。 AngularJS提供了许多内置服务,每个服务都负责一项特定任务。它们始终与前缀$符号一起使用。
AngularJS应用程序中使用的一些重要服务如下:
模块是应用程序不同部分(如控制器,服务,过滤器,指令等)的容器。它被视为main()方法。应用程序的所有依赖关系通常仅在模块中定义。使用角度对象的module()方法创建一个模块。例如:
var app = angular.module('myApp', []);
路由是AngularJS框架的主要功能之一,对于创建具有多个视图的单页应用程序(也称为SPA)很有用。它将应用程序路由到其他页面,而无需重新加载应用程序。在Angular中, ngRoute模块用于实现路由。 ngView,$ routeProvider,$ route和$ routeParams是ngRoute模块的不同组件,有助于配置URL并将其映射到视图。
模板由HTML,CSS和AngularJS指令组成,用于呈现动态视图。它更像是一个静态版本的网页,具有一些其他属性,可在运行时注入和呈现该数据。模板与来自模型和控制器的信息结合在一起。
AngularJS中的表达式是解析为值的代码段。 AngularJS表达式位于{{expression}}内。表达式包含在HTML元素中。
AngularJS表达式还可以包含类似于JavaScript表达式的各种有效表达式。我们还可以在数字之间使用运算符,包括表达式{{}}中的字符串,字面量,对象和数组。
例如:
{{1+1}}
{{Name + " " + email}} (string)
{{ Country.Name }} (object)
{{ fact[4] }} (array)
AngularJS支持一次性绑定表达式。
Angular表达式和JavaScript表达式之间的主要区别如下:
Angular Expressions | JavaScript Expressions |
---|---|
Angular expressions do not support conditional statements, loops, and exceptions. | JavaScript expressions support conditional statements, loops, and exceptions. |
Angular expressions support filters. | JavaScript expressions do not support filters. |
Angular expressions can be written inside HTML. | JavaScript expressions cannot be written inside HTML. |
过滤器用于格式化表达式的值以显示格式化的输出。 AngularJS允许我们编写自己的过滤器。可以使用竖线字符|将过滤器添加到表达式中,然后使用过滤器。例如:
The name is {{ firstName | uppercase }}
过滤器可以应用于视图模板,控制器,服务和指令中。重要的是要知道过滤器区分大小写。 AngularJS提供了一些内置过滤器,例如Currency,Date,Filter,JSON,Limit,Lowcase,Number,Orderby和Uppercase 。
大写过滤器用于将文本转换为大写文本。例如:
Type first name:
Type last name:
Name in Upper Case: {{student.fullName() | uppercase}}
在上面的示例中,使用管道字符将大写过滤器添加到表达式中。它将以大写字母print学生姓名。
另一方面,小写过滤器用于将文本转换为小写文本。例如:
Type first name:
Type last name:
Name in Upper Case: {{student.fullName() | lowercase}}
它将以小写字母print学生姓名。
我们可以在AngularJS中创建自己的过滤器。可以通过将过滤器与我们的模块关联来执行。这些类型的过滤器称为自定义过滤器。
下面给出的示例可用于通过使用过滤器来计算字符串中元素的数量:
angular.module('myCountFilterApp', [])
.filter('count',function()
{
return(function(input)
{
var out=[];
out=input.split(',');
return out.length;
})
});
根据上面的示例,如果字符串为“ 21,34,45 ”,则在应用filter之后的输出将为3 。
货币过滤器默认包含“ $”美元符号。我们可以将以下代码用作Currency Filter的html模板格式。
{{ currency_expression | currency : symbol : fractionSize}}
我们可以通过以下方法使用货币过滤器:
依赖注入(也称为DI)是AngularJS的最佳功能之一。这是一种软件设计模式,其中对象作为依赖项传递,而不是在组件中对其进行硬编码。这对于删除硬编码的依赖关系并使依赖关系可配置非常有用。为了检索模块加载时需要配置的应用程序的必需元素,“ config”操作使用了依赖注入。它允许分离应用程序中不同组件的关注点,并提供一种将依赖组件注入客户端组件的方法。通过使用依赖注入,我们可以使组件可维护,可重用和可测试。
下面显示了AngularJS中依赖项注入的简单情况:
myApp.controller('myController', function ($scope, $http, $location)
{
//logic
});
在这里,声明了一个控制器及其依赖项。
AngularJS提供了以下核心组件,它们可以作为依赖项相互注入:
AngularJS丰富了表单填充和验证。 AngularJS提供客户端表单验证。它检查表单和输入字段(输入,文本区域,选择)的状态,并通知用户当前状态。它还保留有关是否已触摸或修改输入字段的信息。
以下指令可用于跟踪错误:
此外,我们可以在表单声明中使用novalidate来禁用浏览器的本机表单验证。
Link用于将指令与作用域组合并生成实时视图。链接函数用于注册DOM侦听器以及更新DOM。克隆模板后立即执行链接函数。
链接函数有两种:
进样器称为维修定位器。它用于接收提供者定义的对象实例,调用方法,实例化类型和加载模块。每个Angular应用程序都包含一个注入器,该注入器可通过其名称帮助查看实例。
工厂方法用于创建指令。每当编译器首次与指令匹配时,都会调用factory方法。工厂方法是使用$ injector.invoke调用的。
句法
module.factory('factoryName', function);
每个Angular应用程序都包含一个根范围,但是可以有多个子范围。该应用程序可能具有多个作用域,因为子控制器和某些指令会创建新的子作用域。形成或创建新范围时,会将其添加为父范围的子级。与DOM相似,范围也创建了层次结构。
可以使用$ log服务维护日志。 $ log服务的主要目的是帮助调试和故障排除。它是通过以下方法完成的。
$log.error('this will displayed as an error in console')
查找索引用于返回元素的位置。如果找不到请求的元素,则返回值(-1)。
var index = $scope.items.findIndex(record => record.date =='2018-12-12');
在给定的代码中,返回对象的索引,其中item.date = 2018-12-12。
是的,我们可以通过在所需位置注入PHP来执行此操作。即
$scope.name='= $session['name'] ?>';
仅当我们使用PHP在PHP文件中的