import {Inject, PLATFORM_ID} from '@angular/core';
import {isPlatformBrowser} from '@angular/common';
import {Router, NavigationEnd} from '@angular/router';
constructor(@Inject(PLATFORM_ID) platform:any, router:Router){
router.events.filter(ev=>ev instanceof NavigationEnd).subscribe(...)
}
var mount = prompt("Месяц - ", '');
var mount = +prompt("Месяц - ", '');
let state = {
x:1,
y:2,
z:3
}
state = { ...state, y:25};
<div class="box">
<div class="select-wrapper">
<select name="" id="">
<option>lorem test test</option>
<option>lorem test test</option>
<option>lorem test test</option>
<option>lorem test test</option>
<option>lorem test test</option>
<option>lorem test test</option>
</select>
</div>
</div>
.select-wrapper{
display:none;
}
.box:hover .select-wrapper,.select-wrapper:hover{
display:block;
}
Второй способ мне не нравится тем, что приходится для одноразовой операции использовать подписку на поток, которая будет действовать долгое время. Кроме того придётся писать код для отписки(unsubscribe()) при уничтожении компонента.
// класс, описывающий состояние
class WishlistState {
items: Item[];
ids: {[id:string]:boolean};
}
// reducer
export function wishlist(state:WishlistState = null, action){
switch(action.type){
case ADD_PRODUCT:
return {
items: [...(state&&state.items || []), action.payload],
ids: {...state.ids, ...{action.payload.id:!0}}
};
case FETCH_WISHLIST:
return {
items: action.payload,
ids: actions.payload.reduce((acc,v)=>{acc[v.id]=!0; return acc;}, {})
};
default: return state;
}
}
// сервис, через который производится вывод данных в компоненте и проверка на содержание элемента в корзине по id'шнику
class WishlistService {
state: Observable<WishlistState>;
items: Observable<Item[]>;
constructor(store, api){
this.state = store.select(s=>s.wishlist).filter(i=>!!i);
this.items = this.state.map(i=>i.items);
}
fetch(){
this.api.getWishlist().subscribe(data=>{
this.store.dispatch({
type: FETCH_WISHLIST,
payload: data
})
})
}
contains(id):Observable<boolean>{
return this.state.map(i=>!!i.ids[id]);
}
add(item:Item){
this.store.dispatch({
type: ADD_PRODUCT,
payload: item
})
}
}