Angular ngFor无法找到不同的支持对象'[object Object]'

时间:2018-02-13 04:32:17

标签: angular ngrx angular2-observables ngrx-store-4.0

我试图通过使用:

迭代RxJS存储状态的Observable
ngOnInit() {
this.route.params
  .subscribe(
    (params: Params) => {
      this.index = +params['propertyId'];
      this.propertyState = this.store.select('propertyState');

      if (Number.isInteger(this.index)) {
        this.store.dispatch(new fromPropertyAction.SelectProperty(this.index));
      }
    }
  );

}

HTML:     * ngFor =“let property of property property | async).properties; let i = index”         (点击)= “onSelectProperty(I)”

还尝试过:

ngOnInit() {
this.route.params
  .subscribe(
    (params: Params) => {
      this.index = +params['propertyId'];
      this.store.select('propertyState').subscribe(data => {
        this.properties = data.properties;
      })

      if (Number.isInteger(this.index)) {
        this.store.dispatch(new fromPropertyAction.SelectProperty(this.index));
      }
    }
  );

}

HTML:     * ngFor =“let property of properties; let i = index”

但两种情况我都会收到此错误。

无法找到'object'类型的不同支持对象'[object Object]'。 NgFor仅支持绑定到Iterables,例如Arrays。

此外,这里的store在类型为:private store:Store

的构造函数中声明

fromApp.AppState位于app reducer中:

export interface AppState {
    propertyState: fromPropertyReducer.State
}

fromPropertyReducer.State位于属性reducer中:

export interface State {
    properties: Property[];
    selectedProperty: Property;
    selectedPropertyIndex: number;
    openAllProperties: boolean;
    selectedPropertyExpenseIndex: number;
}

此外,最初的属性在html迭代数组中显示正常。但是在向property.expenses数组添加新开销的操作之后,是否会发生此错误。这就是我在reducer中添加新费用的方法:

case PropertyListActions.ADD_PROPERTY_EXPENSE:
        let property = state.properties[state.selectedPropertyIndex];

        const updatedExpenses = [
            ...property.expenses,
            action.payload
        ];

        const updatedProperty = {
            ...property,
            expenses: updatedExpenses
        };

        const updatedProperties = {
            ...state.properties,  
        };

        updatedProperties[state.selectedPropertyIndex] = updatedProperty;

        return {
            ...state,
            properties: updatedProperties    
        }

我查看了其他人的帖子,所以尝试了第二种方法,但没有奏效。请帮忙。谢谢。

1 个答案:

答案 0 :(得分:0)

谢谢大家的帮助!我只是想到你已经建议我的propertyState.properties需要是一个数组。由于在发出操作后发生错误,我发现错误在reducer中。 updatedProperties应该是一个数组,之前我把它作为一个对象。再次感谢你的帮助!我非常感激。