M.C.A Semester – 2 Angular Question and Answer |
Angular Question and Answer
Contents
2. What are the
technologies used in Angular?
3. Why were client-side
frameworks like Angular introduced?
4. How does an Angular
application work?
6. Write a pictorial
diagram of Angular architecture?
8. What is the difference
between constructor and ngOnInit?
9. How is Dependency
Hierarchy formed?
10. What is the purpose
of the async pipe?
11. What is the option to
choose between inline and external template?
12. What is the purpose
of ngFor directive?
13. What is the purpose
of the ngIf directive?
14. What happens if you
use script tag inside template?
15. What are template
expressions?
16. What are template
statements?
17. What is the
difference between Angular and AngularJS?
18. What are some
advantages of using Angular?
19. How do you categorize
data binding types?
20. What is a
parameterized pipe?
22. Do I need to
bootstrap custom elements?
23. How do you define
typings for custom elements?
24. Explain how custom
elements work internally?
25. How to transfer
components to custom elements?
26. What are the mapping
rules between Angular component and custom element?
29. Give an example of a
custom pipe?
30. What is the
difference between pure and impure pipe?
31. What is a
bootstrapping module?
32. Explain how to use
HttpClient with an example?
33. How can you read the
full response?
34. How do you perform
Error handling?
35. What is content
projection?
36. What is the
difference between promise and observable?
37. What do you mean by
data binding?
38. What are some
disadvantages of using Angular?
39. What do you mean by
string interpolation?
40. What are the
differences between Angular decorator and annotation?
41. What is an AOT
compilation in Angular?
42. What are the
advantages of AOT?
43. What are the three
phases of AOT?
44. What are the
components in Angular?
45. What are dynamic
components?
46. What is the purpose
of base href tag?
47. What are modules in
Angular?
49. What are services in
Angular?
50. What is the
difference between jQuery and Angular?
51. What are lifecycle
hooks in Angular?
53. What is a two-way
data binding?
54. What are pipes in
Angular?
55. What are observables
in Angular?
56. How are observables
different from promises?
57. What does Angular
Material mean?
60. What do you mean by
dependency injection?
61. What are Angular
building blocks?
62. Explain the MVVM
architecture.
63. Describe Angular
authentication and authorization.
64. What is the digest
cycle process in Angular?
65. What are the distinct
types of Angular filters?
66. How can one create a
service in Angular?
67. What does subscribing
mean in RxJS?
72. How do you create
directives using CLI?
74. What is a rule in
Schematics?
79. What is HttpClient,
and what are its benefits?
80. What is multicasting
in Angular?
81. What is a directive
in Angular?
82. What will happen if
you do not supply handler for observer?
83. What are angular
elements?
84. What is the browser
support of Angular Elements?
85. What is the role of
SPA in Angular?
86. Explain different
kinds of Angular directives.
87. What are the
different types of compilers used in Angular?
88. What is the purpose
of the common module in Angular?
89. What are the
differences between AngularJS and Angular?
90. What are the
differences between Angular expressions and JavaScript expressions?
91. What is server-side
rendering in Angular?
92. What is Angular
Universal?
94. What are
HttpInterceptors in Angular?
95. How does one share
data between components in Angular?
96. What is ng-content
and its purpose?
Angular is an
open-source web application development framework created by Google. It is used
to build frontend, single-page applications that run on JavaScript. It is a
full-fledged framework, i.e., it takes care of many aspects of frontend web
applications such as HTTP requests, routing, layout, forms, reactivity,
validation, etc.
Angular is a modern frontend
JavaScript framework developed by Google. Angular itself makes use of several
technologies for several reasons to accomplish certain tasks easily as well as
to allow developers to have a better experience while developing applications
with it. Angular uses TypeScript, which is a superscript of JavaScript. So, any
valid JavaScript is a valid TypeScript. However, TypeScript allows us to write
JavaScript as a strongly typed language, and we can define our own types as well,
which makes catching bugs much easier. It also uses RxJS, which allows
developers to better deal with asynchronous operations.
Before
JavaScript-based client-side frameworks, the way dynamic websites worked was by
taking a template that is nothing but HTML code with spaces left empty for
feeding data and content into those templates. This data was usually fetched
from a database. After combining the template and data, we would serve the generated
HTML content back to the user. As you can see, it was a bit complicated, and in
some cases, it took a lot of processing.
To overcome
these issues, people came up with another approach in which they send the
necessary data to render a page from their web servers to the web browsers and
let JavaScript combine this data with a predefined template. Since now, even
mobile phones are powerful enough to do this kind of processing, the servers
can now just send the data to a client over the internet in a recognizable
format, i.e., JSON, XML, etc. This drastically reduces the processing done on
the servers and improves performance.
The working
of Angular is based on its components. So the working of the Angular
application starts with the configuration file ANGULAR.JSON. The builder refers
to this file to find the paths, configurations and the main file. Now the
process finally starts. Next comes the MAIN.TS file that acts as the entry
point for the configuration file. It basically helps in creating the browser
environment that enables it to run the application. Now, the bootstrapping of
the Angular application is done through the APP.MODULE.TS. Now the app
component that gets bootstrapped is stored in the APP.COMPONENT.TS file. Now
the INDEX.HTML file is called and is used to ask Angular to load the
application component. After the component is loaded, the content gets
displayed from the APP.COMPONENT.HTML file. This is how the Angular application
works and the components discussed here help to achieve so.
The
TypeScript feature offered by Angular is preferred by a majority of Front-End
Developers. TypeScript helps in efficiently detecting bugs and helps in easy
compilation by its automatic populating functionality. Also, it offers rich
interfaces, access modifiers, hybrid types etc. All these combined lead to
reduction in the developing time.
The
architecture of Angular comprises the following elements. The pictorial
representation of the same is given below:
·
Components and Templates
·
Ng Modules
·
Metadata
·
Data Binding
·
Directives
·
Services
·
Dependency Injection
Using
metadata is how we tell Angular how to process a class. When we use a
component, it acts as a class unless we tell Angular that it’s a component, and
we do this with the help of metadata. Metadata is attached in TypeScript using
a decorator. Decorators are functions that know the configuration of classes
and how they are supposed to work.
The
difference between constructor and ngOnInit is given below:
Basis |
Constructor |
ngOnInit |
Objective. |
The objective of a Constructor is to
start class members |
ngOnInit is used in case of
startup/announcement and avoids things to work in builders. |
Usage |
A Constructor should be used to set up
Dependency Injection, Initialization of class fields, etc. |
ngOnInit is used to write the work
code that executes as soon as the class is instantiated. |
The
dependency injection system of Angular is hierarchical. It consists of a tree
of injectors that stands parallel to the application’s component tree. The
Dependency Hierarchy is formed with the configurations. The reconfiguration of
the injectors can be done at any given level of the component tree. The
providers for different injectors can also be configured in the injector hierarchy.
The purpose
of the async pipe is basically to mark the components that need to be checked
for changes. It subscribes to an Observable or Promise and returns the latest
value it has emitted. Once this new value gets emitted, the components are
marked by the async pipe. Now, whenever any component is destroyed, the async
pipe detaches or unsubscribes automatically. Similarly, if the expression
reference of the component changes, the async pipe detaches or unsubscribes
from the old Observable or Promise and subscribes to a new one.
Usually,
inline templates are used for small codes and external templates are used for
comparatively bigger views. However, the choice of inline or external templates
is sometimes based on organization policy, situations etc.
Whenever it
is required to repeat a part or portion of an HTML template once for each item
from a collection, the ngFor directive is used. Basically it creates a template
for each time as the iteration becomes easier using ngFor directive.
The purpose
of the ngIf directive is to remove or recreate a part of DOM tree in alignment
to an expression. If the ngIf directive finds that the expression is evaluating
to be false, the element is removed from the tree, else a matching element is
inserted into the DOM tree.
If we use
script tag inside template, Angular marks the value as unsafe and automatically
initiates the process of sanitizing it. This eradicates the script tag but the
content is kept safe, i.e. the text element. This entire process results in
eliminating the risk of injection attacks.
A template
expression in Angular is an expression that is represented in double curly
braces ‘{{ }}’ and produces a value. The template expression is executed by
Angular and is assigned to a property of a binding target. Now, the binding
target can be any of these- HTML element, a directive or even a component.
The methods
or properties in Angular that are used in HTML in response to user events are
called template statements. These template statements allow your application to
engage users through actions like dynamic content display or form submissions
etc.
Following are
some of the major and significant differences between Angular and AngularJS:
Features |
Angular |
AngularJS |
Architecture |
It makes use of directives and
components |
It supports the Model-View-Controller
or MVC model |
Language |
It uses TypeScript language, a
superset of JavaScript that is typed statistically |
It uses JavaScript, a dynamically
typed language |
Expression Syntax |
Angular uses () to bind an event while
[] to bind a property |
It requires professionals to use the
correct ng directive to bind a property or an event |
Mobile Support |
Angular offers mobile support |
Unlike Angular, AngularJS does not
offer mobile support |
Routing |
It uses @RouteConfig{(…)} |
It uses $routeprovider.when() |
Dependency Injection |
It supports hierarchical dependency
injection, along with a unidirectional tree-based change direction |
It does not support dependency
injection |
Structure |
Its simplified structure makes it easy
for professionals to develop and maintain large applications easily |
It is comparatively less manageable |
Using Angular
has several advantages, which are listed below:
·
Angular is built using TypeScript, which allows developers to write
strongly typed code that will get transpiled into JavaScript. The benefits of
strongly typed code are that it is easy to read, maintainable, and less prone
to errors. Also, it provides better tooling with type hints and code
completion.
·
Angular allows us to separate our code into modules, which can be used
to wrap functionalities related to a specific task such as HTTP communication,
data validation, routing, etc.
·
Angular has a large ecosystem of tools, libraries, frameworks, plugins,
etc. that make the whole development experience much faster and enjoyable.
These tools and libraries include Angular CLI, RxJS, NgRx, etc.
To categorize
data binding in Angular, it is divided into various types. Data Binding in
Angular is categorized into following types:
·
One Way Data Binding
·
Two-Way Data Binding
In One way
data binding, the changes in the state affect the view from component to view
template. On the contrary it is also possible that the change in the view
affects the state by changing it from view template to component.
Now, coming
to Two-way Data Binding, the changes in the view can lead to change in the
model. Similarly, any changes in the model can change the view from component
to view template.
The various
types under Two-Way Data Binding are:
·
Interpolation
·
Property binding
·
Class binding
·
Style binding
·
Attribute binding
·
Event binding
·
Two-way binding
In Angular,
pipes are used to transform the raw data into a required format before the
final display to the end-users. These pipes are broadly categorized into 2
categories:
1- Built-in
Pipes,
2- Custom
Pipes
Built-in
Pipes are further divided into 2 types – Parameterized Pipes and Chaining
Pipes.
Parameterized
Pipes refer to the pipes that carry parameters. We can use these pipes to pass
n number of parameters by giving a colon (:) in the command.
A custom
element is used to extend HTML, wherein you can define a tag whose content is
created and controlled by JavaScript code.
No, you do
not need to bootstrap custom elements as they bootstrap automatically when
added to the DOM. Also, the custom elements in Angular get automatically
destroyed when removed from the DOM.
Defining
typings for custom elements in Angular can be done by using NgElement and With Properties
exported from @angular/elements. The following component is a simple container
with input property:
@Component(…)
class
MyDialog {
@Input() content:
string;
}
Let us
understand the internal working of custom elements in steps:
·
Registration of the custom elements: Angular registers the custom elements
using the createCustomElement() function. This function converts a component
into a class that can be registered with the browser as a custom element.
·
Addition of the custom element to DOM: The custom element is added to DOM
similar to a built-in HTML.
·
Browser instantiates component based class: Once the custom element is added
to DOM, an instance of the registered class is created by the browser and added
to the DOM.
·
Data binding and Change detection: In the final step, the created
instance enables data binding and change detection. The template content is
rendered using the component and DOM data.
There are two
important steps to be followed in order to transfer components to custom
elements:
·
Creating a custom element class: As a first step, build a custom
element class using the createCustomElement() function provided by Angular. The
function converts an Angular component (including its dependencies) to a custom
element. The NgElementConstructor interface is implemented through this
conversion which, in turn, creates a constructor class that is used for
producing a self-bootstrapping instance.
·
Registering element class with browser: The customElements.define()
function is used to register the configured constructor, and its associated
custom-element tag with the browser’s CustomElementRegistry.
The important
mapping rules between Angular component and custom element are given below:
·
The component input properties are parsed with the corresponding
attributes for the custom element using the createCustomElement() API.
·
TThe Component outputs are dispatched as HTML Custom Events and have the
name of the custom event that also matches the output name.
The syntax
used for chaining pipes in Angular is given in the following example:
Today is {{
today | date:’fullDate’ | uppercase}}.
In Angular,
you can create custom pipes. They are nothing but customized pipes and were
earlier known as ‘Filters’ in Angular. Commonly, custom pipes are defined as
follows:
import {
Pipe, PipeTransform } from '@angular/core';
@Pipe({name:
'Pipename'})
export class
Pipeclass implements PipeTransform {
transform(parameters): returntype { }
}
Where,
'Pipename' is
the name of the pipe.
‘Pipeclass’
is the name of the class assigned to the custom pipe.
‘Transform’
is the function to work with the pipe.
‘Parameters’
are the parameters which are passed to the pipe.
‘Returntype’
the return type of the pipe.
Let us now
have a look at the example below where we have declared a custom pipe to
convert a number to its square in the Angular application. Please note that we
are using ng generate pipe command to create this custom pipe.
ng generate
pipe square
// Output
CREATE
src/app/square.pipe.spec.ts (187 bytes)
CREATE
src/app/square.pipe.ts (217 bytes)
UPDATE
src/app/app.module.ts (2931 bytes)
Basis |
Pure Pipe |
Impure Pipe |
Meaning |
A pure pipe is called when a change in
the value or the parameters passed to a pipe is detected by Angular. |
An impure pipe is called in case of
every change detection cycle irrespective of any change in the value or
parameter passed. |
Syntax |
@Pipe({ name: ‘filterPipe’, pure: true }) export class FilterPipe {} |
@Pipe({ name: ‘filterPipe’, pure: false }) export class FilterPipe |
Shareability |
Pure pipes can be shared across various
usages and that too without having any effect on the output result |
Impure Pipes cannot be shared because
they might affect the internal state from outside |
Determination of Output change. |
Input values or parameters can
determine the output value or the change in it. |
Input values cannot determine the
output value or the change in it. |
In Angular,
the root module used for bootstrapping or launching the application is known as
the ‘Bootstrapping Module’. A Bootstrapping Module is present in every Angular
app and it is stored in the AppModule class. Infact, the Bootstrapping module
is also called the AppModule.
The following
are the generally followed steps to use the HttpClient :
·
Firstly, start by creating a HttpClient instance.
·
Next, create an instance of one of the methods.
·
Command HttpClient to execute the method.
·
After the execution, read the response.
·
Finally, release the connection.
·
And deal with the response.
In order to
read the full response in Angular, the following code should be used:
getUserResponse():
Observable<HttpResponse> {
return this.http.get(
this.userUrl, { observe: 'response' });
}
In Angular,
error handling can be done by writing a function using HttpClient along with
catchError from RxJS. To handle errors, Angular’s HttpClient parses JSON
responses and returns a JavaScript object in the observable.
In Angular,
Content projection refers to a pattern where you can insert, or project, the
content you want to use inside a different component. For example, consider a
Card component which can accept the content provided by another component.
Basis |
Observables |
Promise |
Values |
Observables have the capacity to emit
multiple values over a given period of time. |
A promise emits only a single value
over a given period of time. |
Execution |
They can be executed only when
subscribed using subscribe() method. |
Promises can be executed as soon as
they get created. |
Cancellation |
Observables are cancellable as they
consist of subscriptions that can be cancelled using the unsubscribe() method. |
Promises once executed are non
cancellable. |
Operations |
Can provide operations like map for
forEach, filter, reduce, retry, and retryWhen operators. |
Promises do not offer any operations. |
Errors |
An observable pushes the errors to the
subscribers |
A promise pushes the errors to the
child promises. |
Data binding
is among the most important and powerful features that help in establishing
communication between DOM and the component. It makes the defining process of interactive
applications simple as you no longer need to panic about data pushing or
pulling between the component and the template.
Listed below
are the four types of data binding in Angular:
·
Event binding
·
Property binding
·
String interpolation
·
Two-way data binding
Although
Angular provides quite a lot of benefits, there are some disadvantages of using
it as well. They are as follows:
·
Getting good SEO results on an Angular application can be a bit
difficult and may need a bit of configuration.
·
Angular has a lot of features packed into it, so getting to know each of
them and learning how to use them effectively together can be a little
difficult.
·
Angular can add quite a lot of weight to your JavaScript bundle, so
using it for smaller projects can be very inefficient and may significantly
increase the load size.
String
interpolation in Angular, also known as the mustache syntax, only allows
one-way data binding. It is a special syntax that makes use of double curly
braces {{}} so that it can display the component data. Inside the braces are
the JavaScript expressions that Angular needs to execute to retrieve the
result, which can further be inserted into the HTML code. Moreover, as part of
the digest cycle, these expressions are regularly updated and stored.
In Angular,
decorators are design patterns that help in the modification or decoration of
the respective classes without making changes in the actual source code.
Annotations,
on the other hand, are used in Angular to build an annotation array. They use
the Reflective Metadata library and are a metadata set of the given class.
The AOT
(ahead-of-time) compiler in Angular converts Angular HTML and TypeScript code
into JavaScript code during the build phase, which makes the rendering process
much faster. This compilation process is needed since Angular uses TypeScript
and HTML code. The compiler converts the code into JavaScript, which can then
be effectively used by the browser that runs our application.
AOT
compilation has several advantages as mentioned below:
Fast rendering: Since, after compilation, the
browser would download a pre-compiled version of our application, it can render
the application immediately without compiling the app.
Less
asynchronous requests: It takes external HTML templates and CSS style sheets and inlines them
within the application JavaScript, which reduces the number of separate Ajax
requests.
Smaller
download size: The
compiler will minify the code for us so that the download size is less.
Template
error detection: During the
compilation phase, any issues in the templates will be detected and reported by
the compiler so that they can be corrected before production.
The three
phases of AOT are:
·
code analysis
·
code generation
·
template type checking
Components
are the basic building block of the user interface in Angular. A component
consists of HTML, CSS, and JavaScript for a specific portion of a user
interface. We can think of these as a custom HTML element that only Angular can
understand. These components are isolated, i.e., styles and code from one
component do not affect other components as they get namespaced by the
compiler. These components are then pieced together by the Angular framework to
build the user interface for the browser to render.
Dynamic
Components in the Angular framework are the components that help in building
large-scale applications easily. Dynamic components are usually instantiated
and placed in the application at runtime.
The href
attribute is used to specify the base URL for all relative URLs on a page. During
navigation, the base href tag is used by the Angular router as a base path to
the component, template, and module files.
A module is a
logical boundary of our application. It is used to encapsulate code dealing
with a specific aspect of the application, such as routing, HTTP, validation,
etc. The main reason why modules are used is to enhance application
composability. For example, if we wish to implement validation logic using
different libraries, then for the one we have already implemented, we can
create a new validation module and replace the current one with the new one,
and our application would work just the same. In Angular, we create a module
using the NgModule decorator.
The full form
of DOM is Document Object Model, and it is responsible for representing the
content of a web page and changes in the architecture of an application. Here,
all the objects are organized in the form of a tree, and the document can
easily be modified, manipulated, and accessed only with the help of APIs.
A service in
Angular is a term that covers broad categories of functionalities. A service is
any value, function, or feature that an app needs. A service is typically used
to accomplish a very narrow purpose such as HTTP communication, sending data to
a cloud service, decoding some text, validating data, etc. A service does one
thing and does it well. It is different from a component as it is not concerned
with HTML or any other kind of presentation logic. Normally, a component uses
multiple services to accomplish multiple tasks.
The main
difference between jQuery and Angular is that jQuery is a JS library, whereas
Angular is a JS frontend framework. Some of the other differences between the
two are mentioned below:
·
Unlike jQuery, Angular offers two-way data binding
·
Unlike Angular, jQuery does not offer support for the RESTful API
·
Angular supports deep linking routing, while jQuery does not
·
Form validation is available in Angular but not in jQuery
Although they
have their differences, Angular and jQuery also have their set of similarities,
like both jQuery and Angular expressions consist of variables, operators, and
literals.
When building
an Angular app, there will be times when we need to execute some code at some
specific event—such as when a component is initialized or displayed on the
screen or when the component is being removed from the screen. This is what
lifecycle hooks are used for. For example, if we have some event listener
attached to an HTML element in a component, such as a button click or form
submission, we can remove that event listener before removing the component
from the screen, just like we can fetch some data and display it on the screen
in a component after the component is loaded on the screen. To use a lifecycle
hook, we can override some methods on a component, such as ngOnInit or ngAfterViewInit.
These methods, if available on a component, will be called by Angular
automatically. This is why these are called lifecycle hooks.
Angular
templates are written using HTML that includes attributes and elements that are
specific to Angular. The templates are further combined with the data from the
controller and the model, which can be rendered to offer the user a dynamic
view.
Two-way data
binding is done in Angular to ensure that the data model is automatically
synchronized in the view. For example, when a user updates some data in a model
and that model is being displayed in multiple places in a component, that
update should be reflected in all the places.
Two-way data
binding has been supported in Angular for a long time. Although, it is
something that should be used with careful consideration as it could lead to
poor application performance or performance degradation as time goes on. It is
called two-way data binding because we can change some data that is in the
component model from the view that is HTML, and that change can also propagate
to all other places in the view where it is displayed.
When we are
trying to output some dynamic data in our templates, we may sometimes need to
manipulate or transform the data before it is put into our templates. Though
there are several ways of doing that, in Angular, using pipes is the most
preferred way. A pipe is just a simple function, which we can use with expressions
in our templates.
Pipes are
extremely useful as we can use them throughout our application after declaring
them just once and registering them with the Angular framework. Some of the
most common built-in pipes in Angular are UpperCasePipe, LowerCasePipe,
CurrencyPipe, etc.
An observable
is a declarative way using which we can perform asynchronous tasks. Observables
can be thought of as streams of data flowing from a publisher to a subscriber.
They are similar to promises as they both deal with handling asynchronous
requests. However, observables are considered to be a better alternative to
promises as the former comes with a lot of operators that allow developers to
better deal with asynchronous requests, especially if there is more than one
request at a time.
Observables
are preferred by many developers as they allow them to perform multiple
operations such as combining two observables, mapping an observable into
another observable, and even piping multiple operations through an observable
to manipulate its data.
Although both
promises and observables are used to handle asynchronous requests in
JavaScript, they work in very different ways. Promises can only handle a single
event at a time, while observables can handle a sequence of asynchronous events
over a period of time. Observables also provide us with a wide variety of
operators that allow us to transform data flowing through these observables
with ease.
A promise is
just a way to wrap asynchronous operations so that they can be easily used,
while an observable is a way to turn asynchronous operations into a stream of
data that flows from a publisher to a subscriber through a well-defined path
with multiple operations transforming the data along the way.
Angular
Material is a UI component library that allows professionals to develop
consistent, attractive, and completely functional websites, web pages, and web
applications. It becomes capable of doing so by following modern principles of
web designing, such as graceful degradation and browser probability.
RxJS is a
library, and the term stands for Reactive Extensions for JavaScript. It is used
so that we can use observables in our JavaScript project, which enables us to
perform reactive programming. RxJS is used in many popular frameworks such as
Angular because it allows us to compose our asynchronous operations or
callback-based code into a series of operations performed on a stream of data
that emits values from a publisher to a subscriber. Other languages such as
Java, Python, etc. also have libraries that allow them to write reactive code
using observables.
Angular
bootstrapping, in simple words, allows professionals to initialize or start the
Angular application. Angular supports both manual and automatic bootstrapping.
Let’s briefly understand the two.
·
Manual bootstrapping: It gives more control to professionals with regards to how and when
they need to initialize the Angular app. It is extremely useful in places where
professionals wish to perform other tasks and operations before the Angular
compiles the page.
·
Automatic bootstrapping: Automatic bootstrapping can be used to add the ng-app directive to the
application’s root, often on the tag if professionals need Angular to
automatically bootstrap the application. Angular loads the associated module
once it finds the ng-app directive and, further, compiles the DOM.
Dependency
injection (DI) in Angular is a software design pattern in which the objects can
be passed in the form of dependencies instead of hard-coding them in the
respective components. This concept is extremely handy when it comes to
separating the object logic creation from its consumption.
The function
‘config’ uses DI that needs to be configured so that the module can be loaded
to retrieve the application elements. Besides, this feature allows
professionals to change dependencies based on necessities.
The following
building blocks play a crucial role in Angular:
·
Components: A component can control numerous views wherein each of the views is a
particular part on the screen. All Angular applications have a minimum of one
component called the root component. This component is bootstrapped in the root
module, the main module. All the components include the logic of the
application that is defined in a class, while the main role of the class is to
interact with the view using an API of functions and properties.
·
Data binding: Data binding is the process in which the various sections of a
template interact with the component. The binding markup needs to be added to
the HTML template so that Angular can understand how it can connect with the
component and template.
·
Dependency injection: It uses DI so that it can offer the necessary dependencies, mainly
services, to the new components. The constructor parameters of a component
inform Angular regarding the numerous services needed by the component, and DI
provides a solution that gives the necessary dependencies to the new class
instances.
·
Directives: Angular templates are of dynamic
nature, and directives help Angular understand how it can transform the DOM
while manifesting the template.
·
Metadata: Classes
have metadata attached to them with the help of decorators so that Angular will
have an idea of processing the class.
·
Modules: Module or NgModule is a block of
code organized using the necessary capabilities set, having one specific workflow.
All Angular applications have at least one module, the root module, and most of
the applications have numerous modules.
·
Routing: Angular
router helps interpret the URL of a browser to get a client-generated
experience and view. This router is bound to page links so that Angular can go
to the application view as soon as the user clicks on it.
·
Services: Service is
a vast category that ranges from functions and values to features that play a
significant role in Angular applications.
·
Template: The view of
each component is linked with a template, and an Angular template is a type of
HTML tag that allows Angular to get an idea of how it needs to render the
component.
The MVVM
architecture plays a significant role in eliminating tight coupling between the
components. This architecture includes the following three parts:
·
Model: The
model represents the business logic and data of a particular application. In
other words, it consists of an entity structure. The model has the business
logic, including model classes, remote and local data sources, and the
repository.
·
View: View is the
application’s visual layer that comprises the UI code. The view sends the
action of the user to the ViewModel. However, it does not receive the response
directly. The view must subscribe to the observables that are exposed to it by
the ViewModel to receive a response.
·
ViewModel: ViewModel
is the application’s abstract layer that connects the View and the Model and
acts as a bridge between the two. It does not know which View needs to be made
use of since it does not have any direct access to the View. The two are
connected using data binding, and the ViewModel records all the changes that
are made to the View and makes the necessary changes to the Model.
The login
details of a user are given to an authenticate API available on the server.
Once the credentials are validated by the server, it returns a JSON web token
(JWT), which includes attributes and the data of the current user. Further, the
user is easily identified using JWT, and this process is known as
authentication.
After logging
in, users have various types and levels of access—some can access everything,
while others may have restrictions from some resources. Authorization
determines the access level of these users.
Digest cycle
in Angular is the process in which the watch list is monitored to track changes
in the watch variable value. In each digest cycle, there is a comparison
between the present and the previous versions of the scope model values.
Filters are a
part of Angular that helps in formatting the expression value to show it to the
user. They can be added to services, directives, templates, or controllers. You
also have the option to create personalized filters as per requirements. These
filters allow you to organize the data easily such that only the data that
meets the respective criteria are displayed. Filters are placed after the pipe
symbol ( | ) while used in expressions.
Various types
of filters in Angular are mentioned below:
currency: It converts numbers to the currency
format
filter: It selects a subset containing items
from the given array
date: It converts a date into a necessary
format
lowercase: It converts the given string into
lowercase
uppercase: It converts the given string into
uppercase
orderBy: It arranges an array by the given
expression
json: It formats any object into a JSON
string
number: It converts a number value into a
string
limitTo: It restricts the limit of a given
string or array to a particular number of elements or strings
Service in
Angular is an object that can be substituted. It is wired and combined with the
help of dependency injection. Services are developed by getting registered in a
module that they need to be executed in. The three methods of creating a
service in Angular are as follows:
·
Service
·
Factory
·
Provider
In RxJS, when
using observables, we need to subscribe to an observable to use the data that
flows through that observable. This data is generated from a publisher and is
consumed by a subscriber. When we subscribe to an observable, we pass in a
function for the data and another function for errors so that, in case there is
some error, we can show some message or process the message in some way.
Routing in a
single-page frontend application is the task of responding to the changes in
the URL made by adding and removing content from the application. This is a
complicated task as we first need to intercept a request that changes the
browser’s URL as we do not wish for the browser to reload. Then, we need to
determine which content to remove and which content to add, and finally, we
have to change the browser’s URL as well to show the user the current page they
are on.
As we can
see, this can be very difficult to implement, especially in multiple
applications. That is why Angular comes with a full routing solution for a
single-page application. In this, we can define routes with matching components
and let Angular handle the routing process.
REST in
Angular stands for Representational State Transfer. It is an API that works on
the request of HTTP. Here, the requested URL points to the data that has to be
processed, after which an HTTP function is used to identify the respective
operation that has to be performed on the data given. The APIs that follow this
method are referred to as RESTful APIs.
A scope is an
object in Angular referring to the application model. It is a context for
executing expressions. These scopes are organized in a hierarchical form that
is similar to the application’s DOM structure. A scope helps in propagating
various events and watching expressions.
Angular CLI
is otherwise known as Angular command-line interface. Angular supports CLI
tools that give professionals the ability to use them to add components, deploy
them instantly, and perform testing and many such functions.
To create a
directive using Angular CLI, the following steps are used:
·
Start a new project using Angular CLI through the following command:
‘ng new [application-name]’
·
Now change the directory into a new directory through the command:
‘cd [application-name]’
·
Once done with changing the directory, use the following command to generate
a new directive:
‘ng generate directive
[path-to-directives/my-directive]’
Schematics
are template-based code generators that enable complex logic. It is usually
packaged into collections and installed with npm. The aim of schematics is to
transform a software project by generating or modifying codes.
Rule in
Schematic refers to a set function that takes a Tree, transforms it and finally
returns a new Tree.
Schematics
CLI is used to transform web-based applications projects.
HttpClient is
an Angular module used for communicating with a backend service via the HTTP
protocol. Usually, in frontend applications, for sending requests, we use the
fetch API. However, the fetch API uses promises. Promises are useful, but they
do not offer the rich functionalities that observables offer. This is why we
use HttpClient in Angular as it returns the data as an observable, which we can
subscribe to, unsubscribe to, and perform several operations on using
operators. Observables can be converted to promises, and an observable can be
created from a promise as well.
In Angular,
when we are using the HttpClient module to communicate with a backend service
and fetch some data, after fetching the data, we can broadcast it to multiple
subscribers, all in one execution. This task of responding with data to
multiple subscribers is called multicasting. It is specifically useful when we
have multiple parts of our applications waiting for some data. To use
multicasting, we need to use an RxJS subject. As observables are unicast, they
do not allow multiple subscribers. However, subjects do allow multiple subscribers
and are multicast.
A directive
in Angular is used to extend the syntax and capabilities of a normal HTML view.
Angular directives have special meaning and are understood by the Angular
compiler. When Angular begins compiling the TypeScript, CSS, and HTML files
into a single JavaScript file, it scans through the entire code and looks for a
directive that has been registered. In case it finds a match, then the compiler
changes the HTML view accordingly.
Angular is shipped
with many directives. However, we can build our directives and let Angular know
what they do so that the compiler knows about them and uses them during the
compilation step.
When a handler
is not supplied to a notification type, the observer automatically ignores the
notifications of that type and the observer instance publishes value only when
it is subscribed to.
Angular
elements refer to the Angular components that are a web standard for defining
new HTML elements and are packed as custom elements. These custom elements are
also called Web Components. The Angular custom elements bootstrap automatically
when added to the DOM tree.
Since Angular
is built on the latest web platform standards, Angular elements are supported
by Chrome, Edge (Chromium-based), Firefox, Opera, and Safari and other
currently existing browsers via polyfills.Polyfills enable the running of full
Angular applications.
SPA stands
for Single Page Application. This technology only maintains one page,
index.HTML, even when the URL changes constantly. SPA technology is easy to
build and extremely fast in comparison to traditional web technology.
There are
three kinds of directives in Angular. Let’s discuss them:
·
Components: A component is simply a directive with a template. It is used to
define a single piece of the user interface using TypeScript code, CSS styles,
and the HTML template. When we define a component, we use the component
decorated with the @ symbol and pass in an object with a selector attribute.
The selector attribute gives the Angular compiler the HTML tag that the
component is associated with so that, now, when it encounters this tag in HTML,
it knows to replace it with the component template.
·
Structural: Structural directives are used to change the structure of a view.
For example, if we wish to show or hide some data based on some property, we
can do so by using the ngIf directive, or if we wish to add a list of data in
the markup, we can use *ngFor, and so on. These directives are called
structural directives because they change the structure of the template.
·
Attribute: Attribute
directives change the appearance or behavior of an element, component, or
another directive. They are used as the attributes of elements. Directives such
as ngClass and ngStyle are attribute directives.
In Angular,
we use two different kinds of compilers:
·
Just-in-time (JIT) compiler
·
Ahead-of-time (AOT) compiler
Both these
compilers are useful but for quite different purposes. The JIT compiler is used
to compile TypeScript to JavaScript as our browsers cannot understand
TypeScript but only JavaScript. This compilation step is done in a development
environment, i.e., when less time is needed to be spent on compilation and more
in development to quickly iterate over features. The JIT compiler is used when
we use ng serve or ng build command to serve the app locally or create an
uncompressed build of the entire codebase.
On the other
hand, the AOT compiler is used to create a minified production build of the
entire codebase, which can be used in production. To use the AOT compiler, we
have to use the ng build command with the –prod blog: ng build –prod. This
instructs the Angular CLI to create an optimized production build of the
codebase. This takes a bit more time because several optimizations such as
minification can take time, but for production builds, this time can be spared.
In Angular,
the common module that is available in the package @angualr/common is a module
that encapsulates all the commonly needed features of Angular, such as
services, pipes, directives, etc. It contains some sub-modules as well such as
the HttpClientModule, which is available in the @angular/common/http package.
Because of the modular nature of Angular, its functionalities are stored in
small self-contained modules, which can be imported and included in our
projects if we need these functionalities.
AngularJS is
the previous version of Angular, which is a complete rewrite, i.e., there are
several differences between the two that we can highlight.
·
Architecture: AngularJS supports the MVC architecture in which the model contains
the business logic; the view shows the information fetched from the models, and
the controller manages interactions between the view and the model by fetching
data from the model and passing it to the view. On the other hand, Angular
architecture is based on components where instead of having separate
pieces for logic, presentation, etc., we now have a single self-contained piece
of the user interface that can be used in isolation or included in a big
project.
·
Language: In
AngularJS, we could only use JavaScript. However, in Angular, we can use both
TypeScript and JavaScript.
·
Mobile support: In AngularJS, we do not get mobile browser support out of the box, but
in Angular, we do get mobile support for all popular mobile browsers.
Angular
expressions and JavaScript expressions are quite different from each other
as, in Angular, we are allowed to write JavaScript in HTML, which we cannot do
in plain JavaScript. Also, all expressions in Angular are scoped locally. But,
in JavaScript, these expressions are scoped against the global window object.
These differences, however, are reconciled when the Angular compiler takes the
Angular code we have written and converts it into plain JavaScript, which can
then be understood and used by a web browser.
In a normal
Angular application, the browser executes our application, and JavaScript
handles all the user interactions. However, because of this, sometimes, if we
have a large application with a big bundle size, our page’s load speed is
slowed down quite a bit as it needs to download all the files, parse
JavaScript, and then execute it. To overcome this slowness, we can use
server-side rendering, which allows us to send a fully rendered page from the
server that the browser can display and then let the JavaScript code take over
any subsequent interactions from the user.
Angular
Universal is a package for enabling server-side rendering in Angular
applications. We can easily make our application ready for server-side
rendering using the Angular CLI. To do this, we need to type the following command:
ng add
@nguniversal/express-engine
This allows
our Angular application to work well with an ExpressJS web server that compiles
HTML pages with Angular Universal based on client requests. This also creates
the server-side app module, app.server.module.ts, in our application directory.
Check out
this Angular tutorial video designed to help you better understand the Angular
framework:
93. What is the difference between interpolated
content and the content assigned to the innerHTML property of a DOM element?
Angular
interpolation happens when in our template we type some JavaScript expression
inside double curly braces ‘{{ someExpression() }}’. This is used to add
dynamic content to a web page. However, we can do the same by assigning some
dynamic content to the innerHTML property of a DOM element. The difference
between the two is that, in Angular, the compiler always escapes the
interpolated content, i.e., HTML is not interpreted, and the browser displays
the code as it is with brackets and symbols, rather than displaying the output
of the interpreted HTML. However, in innerHTML, if the content is HTML, then it
is interpreted as the HTML code.
HttpInterceptors
are part of the @angular/common/HTTP module and are used to inspect and
transform HTTP requests and HTTP responses as well. These interceptors are
created to perform checks on a request, manipulate the response, and perform
cross-cutting concerns, such as logging requests, authenticating a user using a
request, using gzip to compress the response, etc. Hopefully, these Angular
interview questions in 2021 have helped you get a better grasp of Angular as a
framework, as well as its various features and capabilities. These frequently
asked questions have been created to give you a better understanding of the
kinds of questions asked in interviews, so they will help you in understanding
Angular interviews and Angular as a framework. These Angular interview
questions with their answers might have whetted your appetite for learning more
about the framework. They will surely help you to ace your next job interview.
There is not
one but various methods to share data between components in Angular. They are
mentioned as below:
·
Parent to Child: via Input
·
Child to Parent: via Output () and EventEmitter
·
Child to Parent: via ViewChild
·
Unrelated Components: via a Service
The usage of
ng-content in Angular is to insert the content dynamically inside the
component. It helps in increasing component reusability and passing
content inside the component selector.
The ngcc (Angular
Compatibility Compiler) is a tool used in Angular to upgrade node_module,
compiled with non-ivy ngc into ivy compliant format.
In Angular,
it might be possible while generating the code that some of the non-exported
members are folded. This is called Folding, i.e the process in which the
evaluation of an expression is done by the collector and result is recorded in
the .metadata.json, is known as Folding.
A Macros is a
portion of a programming code that helps in the automation of routine
tasks. It usually runs in an excel environment. In Angular, Macros is supported
in the form of functions, static methods etc. Consider the below example of a
Macros code in Angular :
export
function wrapInArray<T>(value: T): T[] {
return
[value];
}
The State
function in Angular declares an animation state within a trigger attached to an
element. The following is the syntax for State function:
state(name:
string, styles: AnimationStyleMetadata, options?: { params: { [name: string]:
any; }; }): AnimationStateMetadata
The Style
function in Angular is used to declare a key/value object that contains CSS
properties/styles and are used for an animation. The syntax of the Style
function is given by:
style (tokens:
"*" | { [key: string]: string | number; } | ("*" | { [key:
string]: string | number; })[]): AnimationStyleMetadata
NgZone is a
service provided by Angular that allows you to execute functions in the Angular
zone through a run() method. This execution is carried out when NgZone triggers
change detection automatically at the right time.
export class
AppComponent implements OnInit {
constructor(private
ngZone: NgZone) {}
ngOnInit() {
// New async
API is not handled by Zone, so you need to use ngZone.run()
// to make
the asynchronous operation callback in the Angular zone and
// trigger
change detection automatically.
someNewAsyncAPI(()
=> {
this.ngZone.run(()
=>
// update the
data of the component
});
});
}
}
NoopZone
helps Angular figure out and know when to trigger the change detection.
However, in the event when Angular needs to be used without a zone, the
NoopZone too needs to be configured.
::
Any Query ::
Prepared By : Uday Shah (HOD - IT)
Contact:
Ruparel Education Pvt. Ltd.
Mobile
No: 9427439007