48 answers on StackOverflow to the most popular Angular questions
I
gathered the most common questions and answers from Stackoverflow.
These questions were chosen by the highest score received. Whether you
are an expert or a beginner, you can learn from others’ experiences.
Table of Contents
- Angular — Promise vs Observable
- Difference between Constructor and ngOnInit
- Can’t bind to ‘ngModel’ since it isn’t a known property of ‘input’
- Angular HTML binding
- Angular/RxJs When should I unsubscribe from `Subscription`
- How can I select an element in a component template?
- What is the equivalent of ngShow and ngHide in Angular?
- How to bundle an Angular app for production
- BehaviorSubject vs Observable?
- @Directive v/s @Component in Angular
- Angular HTTP GET with TypeScript error http.get(…).map is not a function in [null]
- How to use jQuery with Angular?
- Angular EXCEPTION: No provider for Http
- Can’t bind to ‘formGroup’ since it isn’t a known property of ‘form’
- Angular DI Error — EXCEPTION: Can’t resolve all parameters
- Angular — Set headers for every request
- How to use *ngIf else in Angular?
- Angular no provider for NameService
- Binding select element to object in Angular
- What is difference between declarations, providers and import in NgModule
- In Angular, how do you determine the active route?
- Angular CLI SASS options
- Triggering change detection manually in Angular
- Angular and Typescript: Can’t find names
- Angular — What is the meanings of module.id in component?
- How can I get new selection in “select” in Angular 2?
- Angular exception: Can’t bind to ‘ngForIn’ since it isn’t a known native property
- *ngIf and *ngFor on same element causing error
- What is the Angular equivalent to an AngularJS $watch?
- Importing lodash into angular2 + typescript application
- How to detect a route change in Angular?
- Global Events in Angular
- What are differences between SystemJS and Webpack?
- Angular: Can’t find Promise, Map, Set and Iterator
- Angular RC4 — Angular ^2.0.0 with Typescript 2.0.0
- How to detect when an @Input() value changes in Angular?
- How to pass url arguments (query string) to a HTTP request on Angular
- How do you deploy Angular apps?
- ngFor with index as value in attribute
- Define global constants in Angular 2
- Angular — Use pipes in services and components
- Angular2 Exception: Can’t bind to ‘routerLink’ since it isn’t a known native property
- Angular 2 dynamic tabs with user-click chosen components
- Delegation: EventEmitter or Observable in Angular
- How to add bootstrap to an angular-cli project
- access key and value of object using *ngFor
- Angular exception: Can’t bind to ‘ngFor’ since it isn’t a known native property
- How to add font-awesome to Angular 2 + CLI project
- Difference between HTTP and HTTPClient in angular 4?
Enjoy!
Angular — Promise vs Observable
551+ points 🔹 150,497+ viewed
Rohit asked,
Can someone please explain the difference between
Promise
and Observable
in Angular?
An example on each would be helpful in understanding both the cases. In what scenario can we use each case?
Günter Zöchbauer answered, (686+ points)
Promise
A
Promise
handles a single event when an async operation completes or fails.
Note: There are
Promise
libraries out there that support cancellation, but ES6 Promise
doesn't so far.
Observable
An
Observable
is like a Stream
(in many languages) and allows to pass zero or more events where the callback is called for each event.
Often
Observable
is preferred over Promise
because it provides the features of Promise
and more. With Observable
it doesn't matter if you want to handle 0, 1, or multiple events. You can utilize the same API in each case.Observable
also has the advantage over Promise
to be cancelable. If the result of an HTTP request to a server or some other expensive async operation isn't needed anymore, the Subscription
of an Observable
allows to cancel the subscription, while a Promise
will eventually call the success or failed callback even when you don't
need the notification or the result it provides anymore.
Observable provides operators like
map
, forEach
, reduce
, ... similar to an array
There are also powerful operators like
retry()
, or replay()
, ... that are often quite handy.Difference between Constructor and ngOnInit
444+ points 🔹 190,166+ viewed
Haseena P A asked,
Angular provides lifecycle hook
ngOnInit
by default.
Why should
ngOnInit
be used, if we already have a constructor
?Pardeep Jain answered, (512+ points)
The
Constructor
is a default method of the class that is executed when the class is
instantiated and ensures proper initialization of fields in the class
and its subclasses. Angular or better Dependency Injector (DI) analyzes
the constructor parameters and when it creates a new instance by calling
new MyClass()
it tries
to find providers that match the types of the constructor parameters,
resolves them and passes them to the constructor likenew MyClass(someArg);
ngOnInit
is a lifecycle hook called by Angular2 to indicate that Angular is done creating the component.
We have to import
OnInit
in order to use like this (actually implementing OnInit
is not mandatory but considered good practice):import {Component, OnInit} from '@angular/core';
then to use the method of
OnInit
we have to implement in the class like this.export class App implements OnInit{
constructor(){
//called first time before the ngOnInit()
}
ngOnInit(){
//called after the constructor and called after the first ngOnChanges()
}
}
Implement
this interface to execute custom initialization logic after your
directive's data-bound properties have been initialized. ngOnInit is
called right after the directive's data-bound properties have been
checked for the first time, and before any of its children have been
checked. It is invoked only once when the directive is instantiated.
Mostly we use
ngOnInit
for all the initialization/declaration and avoid stuff to work in the
constructor. The constructor should only be used to initialize class
members but shouldn't do actual "work".
So you should use
constructor()
to setup Dependency Injection and not much else. ngOnInit() is better
place to "start" - it's where/when components' bindings are resolved.
For more information refer here:
Can’t bind to ‘ngModel’ since it isn’t a known property of ‘input’
442+ points 🔹 246,901+ viewed
abreneliere asked,
I’ve got the following error when launching my Angular app, even if the component is not displayed.
I have to comment out the so that my app works.
zone.js:461 Unhandled Promise rejection: Template parse errors:
Can't bind to 'ngModel' since it isn't a known property of 'input'. ("
<div>
<label>Created:</label>
<input type="text" [ERROR ->][(ngModel)]="test" placeholder="foo" />
</div>
</div>"): InterventionDetails@4:28 ; Zone: <root> ; Task: Promise.then ; Value:
I’m looking at the Hero plucker but I don’t see any difference.
Here is the component file:
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { Intervention } from '../../model/intervention';
@Component({
selector: 'intervention-details',
templateUrl: 'app/intervention/details/intervention.details.html',
styleUrls: ['app/intervention/details/intervention.details.css']
})
export class InterventionDetails
{
@Input() intervention: Intervention;
public test : string = "toto";
}
abreneliere answered, (674+ points)
Yes that’s it, in the app.module.ts, I just added :
import { FormsModule } from '@angular/forms';
[...]
@NgModule({
imports: [
[...]
FormsModule
],
[...]
})
Angular HTML binding
385+ points 🔹 227,115+ viewed
Aviad P. asked,
I
am writing an Angular application, and I have an HTML response I want
to display. How do I do that? If I simply use the binding syntax
{{myVal}}
it encodes all HTML characters (of course).
I need somehow to bind the inner html of a div to the variable value.
prolink007 answered, (691+ points)
The correct syntax is now the following:
<div [innerHTML]="theHtmlString"></div>
Working in
5.2.6
Angular/RxJs When should I unsubscribe from `Subscription`
320+ points 🔹 69,606+ viewed
Sergey Tihon asked,
When should I store the
Subscription
instances and invoke unsubscribe()
during the NgOnDestroy lifecycle and when can I simply ignore them?
Saving all subscriptions introduces a lot of mess into component code.
HTTP Client Guide ignore subscriptions like this:
getHeroes() {
this.heroService.getHeroes()
.subscribe(
heroes => this.heroes = heroes,
error => this.errorMessage = <any>error);
}
In the same time Route & Navigation Guide says that:
Eventually,
we'll navigate somewhere else. The router will remove this component
from the DOM and destroy it. We need to clean up after ourselves before
that happens. Specifically, we must unsubscribe before Angular destroys
the component. Failure to do so could create a memory leak.
We unsubscribe from our Observable in the ngOnDestroy method.
private sub: any;
ngOnInit() {
this.sub = this.route.params.subscribe(params => {
let id = +params['id']; // (+) converts string 'id' to a number
this.service.getHero(id).then(hero => this.hero = hero);
});
}
ngOnDestroy() {
this.sub.unsubscribe();
}
seangwright answered, (508+ points)
— — Edit 3 — The ‘Official’ Solution (2017/04/09)
I
spoke with Ward Bell about this question at NGConf (I even showed him
this answer which he said was correct) but he told me the docs team for
Angular had a solution to this question that is unpublished (though they
are working on getting it approved). He also told me I could update my
SO answer with the forthcoming official recommendation.
The solution we should all use going forward is to add a
private ngUnsubscribe: Subject = new Subject();
field to all components that have .subscribe()
calls to Observable
s within their class code.
We then call
this.ngUnsubscribe.next(); this.ngUnsubscribe.complete();
in our ngOnDestroy()
methods.
The secret sauce (as noted already by @metamaker) is to call
.takeUntil(this.ngUnsubscribe)
before each of our .subscribe()
calls which will guarantee all subscriptions will be cleaned up when the component is destroyed.
Example:
import { Component, OnDestroy, OnInit } from '@angular/core';
import 'rxjs/add/operator/takeUntil';
// import { takeUntil } from 'rxjs/operators'; // for rxjs ^5.5.0 lettable operators
import { Subject } from 'rxjs/Subject';
import { MyThingService } from '../my-thing.service';
@Component({
selector: 'my-thing',
templateUrl: './my-thing.component.html'
})
export class MyThingComponent implements OnDestroy, OnInit {
private ngUnsubscribe: Subject = new Subject();
constructor(
private myThingService: MyThingService,
) { }
ngOnInit() {
this.myThingService.getThings()
.takeUntil(this.ngUnsubscribe)
.subscribe(thing
No comments:
Post a Comment