Здесь нет connect
. Когда вы работаете с Angular, вы в основном имеете дело с Observables из rxjs.
@angular-redux/store
библиотека использует Выберите Pattern для доступа к хранилищу, поскольку оно очень эффективно подключается к механизму обнаружения изменений Angular.
Это дает нам два варианта:
Декоратор @select
// this selects `counter` from the store and attaches it to this property
// it uses the property name to select, and ignores the $ from it
@select() counter$;
// this selects `counter` from the store and attaches it to this property
@select() counter;
// this selects `counter` from the store and attaches it to this property
@select('counter') counterSelectedWithString;
// this selects `pathDemo.foo.bar` from the store and attaches it to this
// property.
@select(['pathDemo', 'foo', 'bar']) pathSelection;
// this selects `counter` from the store and attaches it to this property
@select(state => state.counter) counterSelectedWithFunction;
// this selects `counter` from the store and multiples it by two
@select(state => state.counter * 2)
counterSelectedWithFuntionAndMultipliedByTwo: Observable<any>;
Внедрение экземпляра NgRedux в конструктор (благодаря Angular DI ):
import * as CounterActions from '../actions/CounterActions';
import { NgRedux } from '@angular-redux/store';
@Component({
selector: 'root',
template: `
<counter [counter]="counter$| async"
[increment]="increment"
[decrement]="decrement">
</counter>
`
})
export class Counter {
private count$: Observable<number>;
constructor(private ngRedux: NgRedux<IAppState>) {}
ngOnInit() {
let {increment, decrement } = CounterActions;
this.counter$ = this.ngRedux.select('counter');
}
incrementIfOdd = () => this.ngRedux.dispatch(
<any>CounterActions.incrementIfOdd());
incrementAsync = () => this.ngRedux.dispatch(
<any>CounterActions.incrementAsync());
}
Вы можете думать об этом паттерне как об эффективном аналоге reselect
для мира Angx с тяжелым RxJS.
Полный пример см. пример приложения или простой пример счетчика