this.sendCert.emit();
- то что тут между скобочками, а в данный момент тут ничего(sendCert)="sendCertTest(certAlias, certPassword)"
ng serve --proxy-config proxy.conf.json
this.http.get
возвращает Observable, это объект библиотеки rxjs, он не является промисом или thenable и к нему не может быть применен awaitreturn this.http.get(this.env.API_URL + 'video', options).toPromise()
getToken(): Observable<string> {
return from(this.storage.getItem('token'));
}
latest() {
return this.getToken().pipe(
switchMap(token => {
const headers = new HttpHeaders({ auth: token });
return this.http.get(this.env.API_URL + 'video', { headers });
}),
)
}
NodeJS + MongoDB
- вот эту часть выкинуть и сделать на firebase. Только с прослойкой на фронте, чтобы можно было легко переехать на полноценный бэк в случае нужды. _nghost-lli-c18
или _ngcontent-rja-c18
a[_ngcontent-rja-c18] {
color: red;
}
Мне нужно, чтобы при самом первом запросе это поле не участвовало в запросе я этого добился тем, что убрал значение по дефолту в этом поле.
getCerts(): Observable<any> {
// ...
return new Observable(observer => {
chrome.runtime.sendMessage(editorExtensionId, message, res=> {
// ...
observer.next(result);
observer.complete();
})
}
})
export const CHROME = new InjectionToken('CHROME');
providers: [
...
{
provide: CHROME,
useValue: window.chrome,
}
...
]
constructor(
@Inject(CHROME) private chrome: chrome,
)
export interface DbConfig {
/** prefix for indexed db name */
name: string;
/** keyPath in indexed db */
keyPath?: string;
/** keyPath of indexed db */
objectName: string;
}
@Injectable()
export class DbService<T = any> {
private version = 1;
private db$: Observable<IDBDatabase> = this.createDb(this.config.name, this.version);
constructor(
@Inject(DB_CONFIG) private config: DbConfig,
) { }
private createDb(name: string, version?: number): Observable<IDBDatabase> {
const openRequest: IDBOpenDBRequest = indexedDB.open(name, version);
openRequest.onupgradeneeded = (evt: IDBVersionChangeEvent) => this.onUpgradeNeeded(openRequest);
return this.fromIDBRequest(openRequest).pipe(
shareReplay(1),
);
}
private onUpgradeNeeded(openRequest: IDBOpenDBRequest): void {
const db = openRequest.result;
if (db.objectStoreNames.contains(this.config.objectName)) {
return;
}
db.createObjectStore(this.config.objectName, { keyPath: this.config.keyPath });
}
public save(value: T, key?: IDBValidKey): Observable<IDBValidKey> {
return this.db$.pipe(
mergeMap((db: IDBDatabase) => this.fromIDBRequest(
this.createIDBObjectStore(db, 'readwrite').put(value, key)
)),
);
}
public saveAll(values: T[]): Observable<IDBValidKey[]> {
return from(values).pipe(
mergeMap((value: T, index: number) => this.save(value, index)),
toArray(),
);
}
public delete(key: string): Observable<undefined> {
return this.db$.pipe(
mergeMap(db => this.fromIDBRequest(
this.createIDBObjectStore(db, 'readwrite').delete(key),
))
);
}
public clear() {
return this.db$.pipe(
mergeMap(db => this.fromIDBRequest(
this.createIDBObjectStore(db, 'readwrite').clear(),
))
);
}
public retreive(key: string): Observable<T> {
return this.db$.pipe(
mergeMap(db => this.fromIDBRequest(
this.createIDBObjectStore(db, 'readonly').get(key)
)),
);
}
public retreiveAll(): Observable<T[]> {
return this.db$.pipe(
mergeMap(db => this.fromIDBRequest(
this.createIDBObjectStore(db, 'readonly').getAll()
)),
);
}
private createIDBObjectStore(db: IDBDatabase, mode: IDBTransactionMode): IDBObjectStore {
const transaction: IDBTransaction = db.transaction(this.config.objectName, mode);
return transaction.objectStore(this.config.objectName);
}
private fromIDBRequest<R>(idbRequest: IDBRequest<R>): Observable<R> {
return new Observable<R>(observer => {
idbRequest.onsuccess = (evt: Event) => {
observer.next(idbRequest.result);
observer.complete();
evt.stopPropagation();
};
idbRequest.onerror = (evt: Event) => {
observer.error(idbRequest.error);
evt.stopPropagation();
};
});
}
public selectDb() {
return this.db$;
}
}
- если запрос длится более 500 мс, то показываем лоадер
- если лоадер уже показан, то отображать его не менее 300 мс
@Injectable()
export class UserService {
isAuthenticated$ = new ReplaySubject(1);
constructor(private http: HttpClient) { }
getUser() {
return this.http.get('/server/api/userService').pipe(
tap(data => this.isAuthenticated$.next(!!data['login'])),
);
}
}
export class HeaderComponent implements OnInit {
user$: Observable<User>;
isAuthenticated$: Observable<boolean>;
constructor(private userService: UserService) { }
ngOnInit() {
this.user$ = this.userService.getUser();
this.isAuthenticated$ = this.userService.isAuthenticated$;
}
}
<span>{{ getAddressByCode(addressCode) | async }}</span>
существует ли возможность в ангуляре вызывать нормальные async методы, а не только RxJs?
constructor(
private router: Router,
) {
this.router.routeReuseStrategy.shouldReuseRoute = function () {
return false;
};
this.router.events.subscribe((evt) => {
if (evt instanceof NavigationEnd) {
this.router.navigated = false;
}
});
}