javascript - Angular/Redux 无法读取未定义的属性 'dispatch'

标签 javascript angular redux dispatcher angular-redux

我正在使用 Angular + Redux 构建一个购物应用程序。 我想要的是通过调度程序功能在点击时触发“ADD_PRODUCT”操作,但是当点击产品时我只会收到以下错误:

错误类型错误:无法读取未定义的属性“dispatch”

我在网上搜索了一下,通过在组件中添加 select 装饰器解决了类似的问题。我也是,但仍然出现此错误。

store.ts

import { IProduct } from './product';
import { ADD_PRODUCT, REMOVE_PRODUCT, REMOVE_ALL_PRODUCTS } from './actions';

export interface IAppState {
    products: IProduct[];
}

export const INITIAL_STATE: IAppState = {
    products[]
}

const productsReducer = (state=[], action) => {
    switch(action.type) {
        case "ADD_PRODUCT" : {
            state = {...state, products: action.payload}
            break;
        }
    }
    console.log("Products Reducer!")
    return state;
}

const cartReducer = (state=[], action) => {
    console.log("Cart Reducer!")
    return state;
}

// Reducers
export const rootReducer = () => ({ 
    products: productsReducer,
    cart: cartReducer
})

store.component.ts

import { Component, OnInit } from '@angular/core';
import { NgRedux, select } from '@angular-redux/store';
import { IAppState } from '../store';
import { ADD_PRODUCT } from '../actions';
import { IProduct } from '../product';
import { Router } from "@angular/router";
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { Http, HttpModule, Response } from '@angular/http';
import { Observable } from 'rxjs/Rx';

import 'rxjs/add/operator/map';

@Component({
  selector: 'app-store',
  templateUrl: './store.component.html',
  styleUrls: ['./store.component.css']
})
export class StoreComponent implements OnInit {

  @select() prod;
  private products = new BehaviorSubject<any>([]);

  product = this.products.asObservable();
  dataUrl = "./assets/products.json";
  prods: any;

  constructor(private _http: Http, ngRedux: NgRedux<IAppState>) { }

  getProducts(): Observable<any>{
      return this._http.get(this.dataUrl)
      .map((res: Response) => res.json());
  }

  ngOnInit() {
    this.getProducts().subscribe(prods => this.prods = prods);
  }

  addToCart(prod){
    this.ngRedux.dispatch({type: "ADD_PRODUCT", payload: prod})
    console.log(prod.title + " added!")
  }

}

store.component.html

<div class="container">
    <div class="row">
        <div *ngFor="let prod of prods" class="col-sm-4 col-md-4 col-lg-4">
        <div class="addBtn" (click)="addToCart(prod)">Add product</div>
     </div>
   </div>
</div>

我做错了什么?如何让调度程序正常工作?

最佳答案

您忘记将 private 修饰符添加到组件构造函数中的 ngRedux 参数。

constructor(private _http: Http, private ngRedux: NgRedux<IAppState>) { }
                                 ^^^^^^^

关于javascript - Angular/Redux 无法读取未定义的属性 'dispatch',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47518809/

相关文章:

angular - 添加 span 元素以显示错误消息

javascript - Jest test.each 的类型不正确

angular - Ionic Capacitor Camera,生成完整质量图像并在不生成 Base64 和 DataUri 的情况下显示它

javascript - redux 多个连接到一个容器

javascript - 第二次呈现页面后,Jquery 不起作用

javascript - 我如何创建像这个网站一样的文字? (CSS/JavaScript)

javascript - 在历史模式下从子路由刷新时组件被挂载两次

javascript - 根据范围变量设置 ng 所需的值

javascript - 理解 Redux 的 Reducer 存储状态

javascript - 使用CombineReducer后无法访问props