this.stock = this.stockService.getStock(stockId);

来源:4-6 改造项目

慕村3407173

2018-07-27

constructor(private routeInfo: ActivatedRoute, private stockService: StockService) { }

//  private routeInfo:ActivatedRoute保留导航传进来的ID对象

//  private stockService:StockService根据id获取股票信息

ngOnInit() {

let stockId = this.routeInfo.snapshot.params['id']; //  从路由信息拿到股票的ID

this.stock = this.stockService.getStock(stockId); // 点击修改,直接在页面显示参数传进来的数据显示

// this.stock = new Stock(1, '第一只股票', 1.99, 3.5, '这是第一只股票', ['it', '互联网']);

console.log(stockId);

}


}

页面没有根据按钮显示这是第几个股票,打印console.log(this.stock)也显示undefined

报错:

StockFormComponent.html:1 ERROR TypeError: Cannot read property 'name' of undefined

    at Object.eval [as updateRenderer] (StockFormComponent.html:1)

    at Object.debugUpdateRenderer [as updateRenderer] (core.js:10872)

    at checkAndUpdateView (core.js:10248)

    at callViewAction (core.js:10484)

    at execComponentViewsAction (core.js:10426)

    at checkAndUpdateView (core.js:10249)

    at callViewAction (core.js:10484)

    at execEmbeddedViewsAction (core.js:10447)

    at checkAndUpdateView (core.js:10244)

    at callViewAction (core.js:10484)

View_StockFormComponent_0 @ StockFormComponent.html:1

proxyClass @ compiler.js:10048

push../node_modules/@angular/core/fesm5/core.js.DebugContext_.logError @ core.js:11098

push../node_modules/@angular/core/fesm5/core.js.ErrorHandler.handleError @ core.js:1679

(anonymous) @ core.js:4524

push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke @ zone.js:388

push../node_modules/zone.js/dist/zone.js.Zone.run @ zone.js:138

push../node_modules/@angular/core/fesm5/core.js.NgZone.runOutsideAngular @ core.js:3719

push../node_modules/@angular/core/fesm5/core.js.ApplicationRef.tick @ core.js:4524

(anonymous) @ core.js:4409

push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke @ zone.js:388

onInvoke @ core.js:3760

push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke @ zone.js:387

push../node_modules/zone.js/dist/zone.js.Zone.run @ zone.js:138

push../node_modules/@angular/core/fesm5/core.js.NgZone.run @ core.js:3674

next @ core.js:4409

schedulerFn @ core.js:3491

push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.__tryOrUnsub @ Subscriber.js:195

push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.next @ Subscriber.js:133

push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._next @ Subscriber.js:77

push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next @ Subscriber.js:54

push../node_modules/rxjs/_esm5/internal/Subject.js.Subject.next @ Subject.js:47

push../node_modules/@angular/core/fesm5/core.js.EventEmitter.emit @ core.js:3483

checkStable @ core.js:3729

onHasTask @ core.js:3773

push../node_modules/zone.js/dist/zone.js.ZoneDelegate.hasTask @ zone.js:441

push../node_modules/zone.js/dist/zone.js.ZoneDelegate._updateTaskCount @ zone.js:461

push../node_modules/zone.js/dist/zone.js.Zone._updateTaskCount @ zone.js:285

push../node_modules/zone.js/dist/zone.js.Zone.runTask @ zone.js:205

drainMicroTaskQueue @ zone.js:595

push../node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask @ zone.js:500

invokeTask @ zone.js:1540

globalZoneAwareCallback @ zone.js:1566

StockFormComponent.html:1 ERROR CONTEXT DebugContext_ {view: {…}, nodeIndex: 0, nodeDef: {…}, elDef: {…}, elView: {…}}

View_StockFormComponent_0 @ StockFormComponent.html:1

proxyClass @ compiler.js:10048

push../node_modules/@angular/core/fesm5/core.js.DebugContext_.logError @ core.js:11098

push../node_modules/@angular/core/fesm5/core.js.ErrorHandler.handleError @ core.js:1684

(anonymous) @ core.js:4524

push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke @ zone.js:388

push../node_modules/zone.js/dist/zone.js.Zone.run @ zone.js:138

push../node_modules/@angular/core/fesm5/core.js.NgZone.runOutsideAngular @ core.js:3719

push../node_modules/@angular/core/fesm5/core.js.ApplicationRef.tick @ core.js:4524

(anonymous) @ core.js:4409

push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke @ zone.js:388

onInvoke @ core.js:3760

push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke @ zone.js:387

push../node_modules/zone.js/dist/zone.js.Zone.run @ zone.js:138

push../node_modules/@angular/core/fesm5/core.js.NgZone.run @ core.js:3674

next @ core.js:4409

schedulerFn @ core.js:3491

push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.__tryOrUnsub @ Subscriber.js:195

push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.next @ Subscriber.js:133

push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._next @ Subscriber.js:77

push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next @ Subscriber.js:54

push../node_modules/rxjs/_esm5/internal/Subject.js.Subject.next @ Subject.js:47

push../node_modules/@angular/core/fesm5/core.js.EventEmitter.emit @ core.js:3483

checkStable @ core.js:3729

onHasTask @ core.js:3773

push../node_modules/zone.js/dist/zone.js.ZoneDelegate.hasTask @ zone.js:441

push../node_modules/zone.js/dist/zone.js.ZoneDelegate._updateTaskCount @ zone.js:461

push../node_modules/zone.js/dist/zone.js.Zone._updateTaskCount @ zone.js:285

push../node_modules/zone.js/dist/zone.js.Zone.runTask @ zone.js:205

drainMicroTaskQueue @ zone.js:595

push../node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask @ zone.js:500

invokeTask @ zone.js:1540

globalZoneAwareCallback @ zone.js:1566


写回答

3回答

ChenBugBug

2019-04-02

假如服务里用了 ‘=== ’,

return this.stocks.find(stock => stock.id === id); //这里的stock.id是number类型

而组件中:

let stockId = this.routeInfo.snapshot.params.id; //这里获取到的是 string类型

由于类型不匹配,导致service返回的是 undefined ,就会导致楼主所说的错误提示

把 === 换成 ==

或者 转换一下类型

let stockId : number = parseInt(this.routeInfo.snapshot.params.id, 10);

0
0

chicypaul

2019-01-02

我也遇到同样的问题,请问解决了吗

0
0

qq_孙悟饭_1

2018-08-09

麻烦吧service里面的信息贴出来看看呢

0
0

Angular4.0从入门到实战 打造股票管理网站

Angular新特性,教你熟练使用 Angular 和 Typescript 开发组件式单页应用

2683 学习 · 1361 问题

查看课程