_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;
}
});
}
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();
}
}