gpt4 book ai didi

javascript - 每当我尝试从中调用方法时,服务都是未定义的

转载 作者:行者123 更新时间:2023-12-03 01:13:39 27 4
gpt4 key购买 nike

我正在 Coursera 上关注 Jogesh Muppala 的 Angular 类(class),但我被困在第 4 周开始时,他使用 HttpClient 与服务器进行通信。

我完全按照说明进行操作,但他的说明似乎破坏了我的程序。 DishServices 是一项从服务器检索数据的服务,并被注入(inject)到一个组件中,该组件调用该服务来执行检索。但是,每当进行该调用时,我在页面上和控制台上都看不到任何内容。

MenuComponent_Host.ngfactory.js? [sm]:1 ERROR TypeError: Cannot read property 'getDishes' of undefined at MenuComponent.push../src/app/menu/menu.component.ts.MenuComponent.ngOnInit (menu.component.ts:18) at checkAndUpdateDirectiveInline (core.js:9250) at checkAndUpdateNodeInline (core.js:10514) at checkAndUpdateNode (core.js:10476) at debugCheckAndUpdateNode (core.js:11109) at debugCheckDirectivesFn (core.js:11069) at Object.eval [as updateDirectives] (MenuComponent_Host.ngfactory.js? [sm]:1) at Object.debugUpdateDirectives [as updateDirectives] (core.js:11061) at checkAndUpdateView (core.js:10458) at callViewAction (core.js:10699)

碰巧,我更喜欢使用旧的编写提供程序的风格,并且它显示了一个错误。

  providers: [{provide: DishService,                useValue: new DishService()},
{provide: PromotionService, useValue: new PromotionService()},
{provide: ProcessHTTPMessageService, useValue: new ProcessHTTPMessageService()},
{provide: 'BaseURL', useValue: baseURL}
],

DishService() 出现错误,表明参数数量错误。当我检查 DishService 时,

   import {Dish} from '../shared/dish';
import {DISHES } from '../shared/dishes';
import {Observable, of} from 'rxjs';
import { delay } from 'rxjs/operators';

import { map } from 'rxjs/operators';
import { HttpClient } from '@angular/common/http';
import { baseURL } from '../shared/baseurl';
import { Injectable } from '@angular/core';


export class DishService {

constructor(private http: HttpClient) {

}

getDishes(): Observable<Dish[]>{
return this.http.get<Dish[]>(baseURL + 'dishes');

}

}

构造函数中有 HttpClient,这意味着它需要一个这样的对象来实例化。本教程没有指定在提供程序中提供新的 HttpClient。我尝试切换到新的编写提供程序风格,并在 root 中提供了 Injectable,但没有成功。

编辑:来自 MenuComponent 的代码

import { Component, OnInit, Inject } from '@angular/core';
import { Dish } from '../shared/dish';
import {DishService} from '../services/dish.service';

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

dishes: Dish[];

constructor(private dishService: DishService, @Inject('BaseURL') private BaseURL) { }

ngOnInit() {
console.log("fkvjndf");
this.dishService.getDishes().subscribe(dishes => this.dishes = dishes);
}


}

编辑:

已替换

  providers: [{provide: DishService,                useValue: new DishService()},
{provide: PromotionService, useValue: new PromotionService()},
{provide: ProcessHTTPMessageService, useValue: new ProcessHTTPMessageService()},
{provide: 'BaseURL', useValue: baseURL}
],

  providers: [{provide: DishService},
{provide: PromotionService},
{provide: ProcessHTTPMessageService},
{provide: 'BaseURL', useValue: baseURL}
],

并添加

@Injectable({
providedIn: 'root'
})

到 DishService.ts

只是为了得到相同的错误消息

MenuComponent_Host.ngfactory.js? [sm]:1 ERROR TypeError: Cannot read property 'getDishes' of undefined at MenuComponent.push../src/app/menu/menu.component.ts.MenuComponent.ngOnInit (menu.component.ts:18) at checkAndUpdateDirectiveInline (core.js:9250) at checkAndUpdateNodeInline (core.js:10514) at checkAndUpdateNode (core.js:10476) at debugCheckAndUpdateNode (core.js:11109) at debugCheckDirectivesFn (core.js:11069) at Object.eval [as updateDirectives] (MenuComponent_Host.ngfactory.js? [sm]:1) at Object.debugUpdateDirectives [as updateDirectives] (core.js:11061) at checkAndUpdateView (core.js:10458) at callViewAction (core.js:10699)

最佳答案

问题是您在构造函数中定义了一个参数,但是当您调用 new DishService() 时,您没有传递此值。一般来说,您可以简化您的提供程序部分并应该能够同时解决您的问题。

providers: [
DishService,
PromotionService,,
ProcessHTTPMessageService,
{provide: 'BaseURL', useValue: baseURL}
],

如果您的提供程序不需要任何特殊构造,您只需传入类即可,依赖项注入(inject)框架将为您处理依赖项。

我不明白为什么你应该使用旧的编写提供程序的风格,但是如果你想让它变得更复杂,一旦你需要依赖项,你就需要使用工厂。但在我看来,在你的情况下这样做是没有意义的。

关于javascript - 每当我尝试从中调用方法时,服务都是未定义的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52114451/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com