@ ngrx /使用Angular 2的存储:无法读取未定义的属性

D_Naish

我正在尝试使用Angular 2-RC4学习@ ngrx / store。我有一个从组件调用的服务,而我只是想在发生变化时尝试记录车辆列表。

车辆

export interface Vehicle {
  ...stuff...
}

车辆减速器

import { Vehicle } from '../models';

export interface VehiclesState {
  vins: string[];
  vehicles: { [vin: string]: Vehicle };
}

const initialState: VehiclesState = {
  vins: [],
  vehicles: {}
}

export const vehicles = (state: any = initialState, {type, payload}) => {
  switch (type) {
    case 'LOAD_VEHICLES':
      const vehicles: Vehicle[] = payload;
      const newVehicles = vehicles.filter(vehicle => !state.vehicles[vehicle.vin]);

      const newVehicleVins = newVehicles.map(vehicle => vehicle.vin);
      const newVehiclesList = newVehicles.reduce((vehicles: { [vin: string]: Vehicle }, vehicle: Vehicle) => {
        return mergeObjects(vehicles, {
          [vehicle.vin]: vehicle
        });
      }, {});

      return {
        vins: [...state.vins, ...newVehicleVins],
        vehicles: mergeObjects({}, state.vehicles, newVehiclesList)
      }
  }
}

主要

import { bootstrap } from '@angular/platform-browser-dynamic';
import { enableProdMode } from '@angular/core';
import { HTTP_PROVIDERS } from '@angular/http';
import { provideStore } from '@ngrx/store'

import { AppComponent, environment } from './app/';
import { vehicles } from './app/shared/reducers/vehicles'

if (environment.production) {
  enableProdMode();
}

bootstrap(AppComponent,
  [
    HTTP_PROVIDERS,
    provideStore(vehicles, {
      vins: [],
      vehicles: {}
    })
  ]
);

车辆服务

import {Http, Headers} from '@angular/http';
import {Injectable} from '@angular/core';
import {Store} from '@ngrx/store';
import {Observable} from "rxjs/Observable";
import 'rxjs/add/operator/map';

import {Vehicle} from '../models/vehicle.model';

const BASE_URL = 'http://localhost:3000/vehicles/';
const HEADER = { headers: new Headers({ 'Content-Type': 'application/json' }) };

@Injectable()
export class VehiclesService {
  vehicles: Observable<Array<Vehicle>>;

  constructor(private http: Http, private store: Store<Vehicle[]>) {
    this.vehicles = this.store.select('vehicles');
  }

  loadVehicles() {
    this.http.get(BASE_URL)
      .map(res => res.json())
      .map(payload => ({ type: 'LOAD_VEHICLES', payload: payload }))
      .subscribe(action => this.store.dispatch(action));
  }
}

AppComponent

import { Component, OnInit, Input } from '@angular/core';
import { Observable } from "rxjs/Observable";
import { Store } from '@ngrx/store';

import { Vehicle, VehiclesService } from './shared';

@Component({
  moduleId: module.id,
  selector: 'app-root',
  templateUrl: 'app.component.html',
  styleUrls: ['app.component.css'],
  providers: [VehiclesService]
})
export class AppComponent implements OnInit{
  title = 'app works!';

  vehicles: Observable<Vehicle[]>;

  constructor(private vehiclesService: VehiclesService) {
    this.vehicles = vehiclesService.vehicles;

    vehiclesService.loadVehicles();
  }

  ngOnInit() {
    console.log(this.vehicles)
    this.vehicles.subscribe(vehicles => console.log(vehicles));
  }
}

但是当它运行时,我收到一个TypeError TypeError: Cannot read property 'vehicles' of undefined

第一个console.log返回一个Store对象,但是订阅似乎失败了。

知道我在做什么错吗?

迦勒·威廉姆斯(Caleb Williams)

您需要将自己更改provideStoreprovideStore({vehicles: vehicles})

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Angular NgRx选择器无法读取未定义的属性

来自分类Dev

无法读取未定义Angular 2的属性

来自分类Dev

Angular - Ionic 2 - 无法读取未定义的属性“订阅”

来自分类Dev

Angular无法读取未定义的属性

来自分类Dev

无法使用Angular读取未定义的属性“ get”

来自分类Dev

无法使用 Angular 6 读取未定义的属性“冠军”

来自分类Dev

使用ngFormModel(ES6)时angular2无法读取未定义的属性'validator'

来自分类Dev

使用@input在Angular 2中“无法读取未定义的属性'名称'”

来自分类Dev

ngrx/store - 测试,抛出类型错误:无法读取未定义的属性“管道”

来自分类Dev

NgZone / Angular2 / Ionic2 TypeError:无法读取未定义的属性“运行”

来自分类Dev

(Angular2 和 Typescript)Angular 的 DatePicker 无法读取未定义的属性“切换”

来自分类Dev

无法读取Angular Mobile中未定义的属性“ makeCurrent”

来自分类Dev

无法读取Angular JS中未定义的属性成功

来自分类Dev

Angular TypeError:无法读取未定义的属性“ then”

来自分类Dev

Angular无法读取未定义的属性“ push”

来自分类Dev

Angular-无法读取未定义的属性“ $ invalid”

来自分类Dev

(Angular http $):无法读取未定义的属性“ length”

来自分类Dev

TypeError:无法读取未定义<Angular 8>的属性'map'

来自分类Dev

Angular:无法读取未定义TypeError的属性“ routeConfig”

来自分类Dev

Angular FormArray:无法读取未定义的属性“ push”

来自分类Dev

无法读取未定义的属性“目标”-Ionic Angular

来自分类Dev

Angular无法读取未定义的属性“ navigate”

来自分类Dev

Angular 9 TypeError:无法读取未定义的属性“ subscribe”

来自分类Dev

Angular Material TypeError:无法读取未定义的属性“ id”

来自分类Dev

无法读取未定义的Angular / TypeScript属性'forEach'

来自分类Dev

Angular / Karma TypeError:无法读取未定义的属性“ offsetTop”

来自分类Dev

Angular TypeError无法读取未定义的属性“ then”

来自分类Dev

(Angular http $):无法读取未定义的属性“ length”

来自分类Dev

angular.js抛出无法读取未定义的属性“ then”

Related 相关文章

  1. 1

    Angular NgRx选择器无法读取未定义的属性

  2. 2

    无法读取未定义Angular 2的属性

  3. 3

    Angular - Ionic 2 - 无法读取未定义的属性“订阅”

  4. 4

    Angular无法读取未定义的属性

  5. 5

    无法使用Angular读取未定义的属性“ get”

  6. 6

    无法使用 Angular 6 读取未定义的属性“冠军”

  7. 7

    使用ngFormModel(ES6)时angular2无法读取未定义的属性'validator'

  8. 8

    使用@input在Angular 2中“无法读取未定义的属性'名称'”

  9. 9

    ngrx/store - 测试,抛出类型错误:无法读取未定义的属性“管道”

  10. 10

    NgZone / Angular2 / Ionic2 TypeError:无法读取未定义的属性“运行”

  11. 11

    (Angular2 和 Typescript)Angular 的 DatePicker 无法读取未定义的属性“切换”

  12. 12

    无法读取Angular Mobile中未定义的属性“ makeCurrent”

  13. 13

    无法读取Angular JS中未定义的属性成功

  14. 14

    Angular TypeError:无法读取未定义的属性“ then”

  15. 15

    Angular无法读取未定义的属性“ push”

  16. 16

    Angular-无法读取未定义的属性“ $ invalid”

  17. 17

    (Angular http $):无法读取未定义的属性“ length”

  18. 18

    TypeError:无法读取未定义<Angular 8>的属性'map'

  19. 19

    Angular:无法读取未定义TypeError的属性“ routeConfig”

  20. 20

    Angular FormArray:无法读取未定义的属性“ push”

  21. 21

    无法读取未定义的属性“目标”-Ionic Angular

  22. 22

    Angular无法读取未定义的属性“ navigate”

  23. 23

    Angular 9 TypeError:无法读取未定义的属性“ subscribe”

  24. 24

    Angular Material TypeError:无法读取未定义的属性“ id”

  25. 25

    无法读取未定义的Angular / TypeScript属性'forEach'

  26. 26

    Angular / Karma TypeError:无法读取未定义的属性“ offsetTop”

  27. 27

    Angular TypeError无法读取未定义的属性“ then”

  28. 28

    (Angular http $):无法读取未定义的属性“ length”

  29. 29

    angular.js抛出无法读取未定义的属性“ then”

热门标签

归档