Size: a a a

Советский Angular

2020 November 30

DT

Dmitriy Teplov in Советский Angular
Dmitriy Teplov
upd:

interface FirstSimpleChange<T> extends SimpleChange {
 readonly previousValue: undefined;
 readonly currentValue: T;
 readonly firstChange: true;

 isFirstChange(): true;
}

interface SubsequentSimpleChange<T> extends SimpleChange {
 readonly previousValue: T;
 readonly currentValue: T;
 readonly firstChange: false;

 isFirstChange(): false;
}

type TypedSimpleChange<T> = FirstSimpleChange<T> | SubsequentSimpleChange<T>;

export type TypedChanges<Class, InputProps extends keyof Class> = {
 [Prop in InputProps]?: TypedSimpleChange<Class[Prop]>;
};
с литералами работают условные тайпгарды
источник

N👩

Nikita 👩🏻‍💻💭... in Советский Angular
Alena Hrenovskaya
я раньше такая типа ж девочка, если и пить немного - то бокал вина/шампанского. А теперь поняла, что лучше рюмка коньяка/виски/рома, чем даже глоток вина или шампанского. Намного легче пьется и ощущение потом х)
Ну мы 2 бокала выпили, а потом бахнули по шоту брусничной настойки
источник

S

Smooth Operator in Советский Angular
Vadim Ivanov
А как вы менеджите состояние загружаемых данных? я придумал только перед subscribe переключать. Или лучше в pipe вынести?
сделай пайп который будет давать { loading: boolean; data: T } и шарить подсписку
источник

DT

Dmitriy Teplov in Советский Angular
Vadim Ivanov
А как вы менеджите состояние загружаемых данных? я придумал только перед subscribe переключать. Или лучше в pipe вынести?
Если руками, то я использую такой оператор

export function setIsLoading<T>(callback: (isLoading: boolean) => void): MonoTypeOperatorFunction<T> {
 return source =>
   defer(() => {
     callback(true);
     return source.pipe(finalize(() => callback(false)));
   });
}

Пример с локальным стейтом:

class MyComponent<T> {
 readonly isDataLoading$ = new ReplaySubject<boolean>(1);
 readonly data$ = new BehaviourSubject<T | null>(null);

 loadData(): void {
   this.service.getData().pipe(
     setIsLoading(isLoading => this.isDataLoading$.next(isLoading)),
     takeUntilDestroyed(this),
   ).subscribe(this.data$);
 }
}
источник

S

Smooth Operator in Советский Angular
и еще два пайпа, один мапит в лоадинг другой в данные
источник

S

Smooth Operator in Советский Angular
как вариант
источник

SS

Sergei Sergeevich in Советский Angular
использовал сегодня webstorm при рефакторинге структуры проекта. Классно он импорты везде подправляет, в моем любимом виме этого как раз не хватает. Только вот не понимаю почему webstorm отказывается ипользовать пути из tsconfig когда делает автоимпорт. Не знаете как лечить?
источник

Вキ

Вертихвост キバ 🏡🦊... in Советский Angular
Vadim Ivanov
А как вы менеджите состояние загружаемых данных? я придумал только перед subscribe переключать. Или лучше в pipe вынести?
ты можешь использовать оператор scan, и вынести в отдельный оператор

начал загрузку? отправляешь, что начал загрузку
закончил загрузку? отправляешь, что закончил загрузку и данные
приключилась ошибка? отправляешь, что закончил загрузку, есть ошибка и ошибку

просто как пример, если уже знаком с ngrx https://medium.com/ngx/practical-use-rxjs-81aaab57045c
источник

AT

Arams Tomojans in Советский Angular
[
 {
   "bread": "root",
   "catId": "none"
 },
 {
   "bread": "Dress",
   "catId": "1"
 },
 {
   "bread": "Men",
   "catId": "19"
 },
 {
   "bread": "Shorts 2",
   "catId": "30"
 }
]
народ как можно быстро пробежаться по этому обьекту и удалить все обьекты которые после НАПРИМЕР  "catId": "1" ?
источник

DT

Dmitriy Teplov in Советский Angular
Sergei Sergeevich
использовал сегодня webstorm при рефакторинге структуры проекта. Классно он импорты везде подправляет, в моем любимом виме этого как раз не хватает. Только вот не понимаю почему webstorm отказывается ипользовать пути из tsconfig когда делает автоимпорт. Не знаете как лечить?
источник

AT

Arams Tomojans in Советский Angular
помню встречал такую штуку( но забыл где
источник

DT

Dmitriy Teplov in Советский Angular
Arams Tomojans
[
 {
   "bread": "root",
   "catId": "none"
 },
 {
   "bread": "Dress",
   "catId": "1"
 },
 {
   "bread": "Men",
   "catId": "19"
 },
 {
   "bread": "Shorts 2",
   "catId": "30"
 }
]
народ как можно быстро пробежаться по этому обьекту и удалить все обьекты которые после НАПРИМЕР  "catId": "1" ?
никак, в обычном объекте порядок не гарантирован
источник

SS

Sergei Sergeevich in Советский Angular
Arams Tomojans
[
 {
   "bread": "root",
   "catId": "none"
 },
 {
   "bread": "Dress",
   "catId": "1"
 },
 {
   "bread": "Men",
   "catId": "19"
 },
 {
   "bread": "Shorts 2",
   "catId": "30"
 }
]
народ как можно быстро пробежаться по этому обьекту и удалить все обьекты которые после НАПРИМЕР  "catId": "1" ?
map?
источник

DT

Dmitriy Teplov in Советский Angular
а, сорри, там массив
источник

VI

Vadim Ivanov in Советский Angular
спасибо
источник

AT

Arams Tomojans in Советский Angular
Sergei Sergeevich
map?
может быть
источник

Вキ

Вертихвост キバ 🏡🦊... in Советский Angular
Arams Tomojans
[
 {
   "bread": "root",
   "catId": "none"
 },
 {
   "bread": "Dress",
   "catId": "1"
 },
 {
   "bread": "Men",
   "catId": "19"
 },
 {
   "bread": "Shorts 2",
   "catId": "30"
 }
]
народ как можно быстро пробежаться по этому обьекту и удалить все обьекты которые после НАПРИМЕР  "catId": "1" ?
const newArray = [];

for (const item of array) {
 newArray.push(item);
 
 if (item.catId === 1) {
   break;
 }
}
источник

AT

Arams Tomojans in Советский Angular
Dmitriy Teplov
никак, в обычном объекте порядок не гарантирован
в моем случаи спорядок будет
источник

DT

Dmitriy Teplov in Советский Angular
Arams Tomojans
может быть
findIndex/slice
источник

Вキ

Вертихвост キバ 🏡🦊... in Советский Angular
Вертихвост キバ 🏡🦊
const newArray = [];

for (const item of array) {
 newArray.push(item);
 
 if (item.catId === 1) {
   break;
 }
}
источник