export class Task1Module {
constructor(
public distance:Observable<distance>,
public convert_to:string
) {
}
}
import { Directive } from '@angular/core';
import { NgControl } from '@angular/forms';
import { Subscription } from 'rxjs';
@Directive({
selector: '[numbers]',
})
export class NumbersDirective {
sub = new Subscription();
constructor(
private ngControl: NgControl
) { }
ngOnInit() {
this.sub = this.ngControl.valueChanges.subscribe(value => {
this.ngControl.control.setValue(
(value || '').replace(/[^0-9]*/g, ''),
{ emitEvent: false },
)
});
}
ngOnDestroy() {
this.sub.unsubscribe();
}
}
private expandAcsendants(index: number) {
for (let c = index; this.treeControl.dataNodes[c]; c--) {
this.treeControl.expand(this.treeControl.dataNodes[c]);
if (this.treeControl.dataNodes[c].level === 0) {
break;
}
}
}
встроенные инструмены ангуляра для работы с веб сокетами
Почему тогда сейчас я могу работать с данным апи из любого другого места средствами ангуляра?
<select #optSelect (change)="kindSelect.kinds = filterConfig[optSelect.value]">
<option *ngFor="let opt of filterConfig | keyvalue">{{opt.key}}</option>
</select>
<select #kindSelect>
<option *ngFor="let kind of (kindSelect.kinds || filterConfig.fruit)">{{kind}}</option>
</select>
public filterConfig = {
fruit: ['apple', 'orange', 'pineapple', 'grape'],
vegetable: ['carrot', 'potato', 'dill', 'cucumber']
}
kindSelect.kinds
была введена из-за того, что если просто взять optSelect.value
на начальной отрисовке шаблона value еще нет, optSelect.value
появляется при первой детекции изменений, и в дев моде на втором проходе детекции обнаруживаются несоответствия значений с шаблоном, что вызовет ExpressionChangedAfterItHasBeenCheckedError.event.target.files
имеет тип FileList и у него конечно нет forEach, это не массив. Массив можно сделать через Array.from<mat-card [formGroupName]="body">
Cannot find control with unspecified name attribute
в консоли не смутили чтоли?