如何从商店采取国家?角/ NGRX

时间:2018-01-21 21:29:10

标签: angular ngrx

我很长时间使用react / redux,现在我正在尝试学习angular / ngrx。

我有疑问

怎么写在商店?在redux商店我只是连接使用过的功能         连接,并在角度我连接像这样

        @Component({   selector: 'home',
            templateUrl: './home.html' }) export class HomeComponent implements OnInit {

            console = console;
            todos$: Observable<any>;
            todo: string;
            todoDate: string;
            indexToEdit: number | null;


            constructor(private store: Store<any>) {}

            ngOnInit() {
                this.todos$ = this.store.select('todoReducer');
            }

接下来我在模板中使用todos$进行循环,但是如果我console.log(todos$) 它只是商店的对象,我无法找到我的商店状态,我怎样才能从商店中读取状态?

2 个答案:

答案 0 :(得分:1)

您可以使用rxjs operator do来显示副作用,不要忘记导入它。

this.todos$ = this.store.select('todoReducer').do(res => console.log(res))

另一种方式是订阅,但这将破坏ngrx的目的。并且您不会在模板中使用异步管道,也需要取消订阅。

storeSub: Subscription;

this.storeSub = this.store.select('todoReducer').subscribe((data) => {
  console.log(data);
  this.todos = data;
})

答案 1 :(得分:1)

todo $是您所在州的观察对象。

您可以在控制器中使用它,如下所示:

this.todo$.subscribe(state => console.log(state));

或者在你的模板中这样:

{{ todo$ | async }}
<input type="text" name="myfield" (change)="modifyField($event.target.value)" [value]="(todo$ | async)?.myfield"></input>