甚至可以让服务调用组件方法吗?
myapp.component
export class MyAppComponent {
public value;
...
public setValue(payload){
this.value = payload;
}
}
myapp.service
@Injectable()
export class MyAppService {
private myAppComponent: MyAppComponent;
private apiClientService: ApiClientService
// ...
After i make an PUT http call, the body from the response is my new "value"
// ...
putValue(payload: JSON){
return this.apiClientService.putAPIObject(payload).then((response) => {
this.myAppComponent.setValue(response);
});
}
}
这将导致一个错误:Uncaught(在promise中):TypeError:无法读取未定义的
的属性“setValue”。
有人能解释我做错了什么吗?提前谢谢。
编辑:由于人们抱怨我的方法,如果有人能向我解释什么是处理这个问题的最佳方法,我完全可以从头开始。
我从api中获取值,更改它们,然后将它们放回api。我不想再次进行get调用,因此我在Put调用的响应中获得了所需的新数据。
呼叫从组件发出
我想问题是在起点和终点之间我有一个额外的服务。
编辑2:我试图避免使用
组件服务
,只使用组件就可以了--
即使这个灵魂在我不喜欢的时候也对我有用,因为我必须从我的api中用其他对象复制和粘贴许多相同“操作”的代码。例如,我让它为图片组件工作,但我也需要这个为我的电影组件。通常情况下,如果我在一个项目中经常写相同的代码,这是一件坏事,或者不是?
至少有几种方法可以解决这个问题,但希望这能给你一个开始。接受反馈和纠正。
让服务自身对价值的认知发生变化,发出变化。组件监听 <罢工> 一个事件发射器 1服务对值变化做出反应。(另请参阅:从Angular 2服务创建和返回可观察)
MyAppService
import { Subject } from 'rxjs/Subject';
@Injectable()
export class MyAppService {
private valueSource = new Subject<any>();
public valueUpdate$ = this.valueSource.asObservable();
putValue(payload: JSON){
return this.apiClientService.putAPIObject(payload).then((response) => {
/** here **/
this.valueUpdate$.next(response);
});
}
}
MyAppComponent
export class MyAppComponent {
public value;
private valueSubscription;
constructor(private _myAppService: MyAppService) {}
ngOnInit() {
/** and here **/
this._myAppService.valueUpdate$.subscribe((p) => this.setValue(p));
}
...
public setValue(payload){
this.value = payload;
}
}
回答最初的问题,我们的想法是向服务注册组件,以便它可以根据需要调用组件。您可以通过依赖项注入获取引用,但不推荐(例如,如果您的原始组件引用被破坏了怎么办?)
MyAppService
@Injectable()
export class MyAppService {
private myAppComponent: MyAppComponent;
/** here **/
registerMyApp(myApp: MyAppComponent) {
this.myAppComponent = myApp;
}
putValue(payload: JSON){
return this.apiClientService.putAPIObject(payload).then((response) => {
this.myAppComponent.setValue(response);
});
}
}
MyAppComponent
export class MyAppComponent {
public value;
/** and here **/
constructor(myAppService: MyAppService) {
myAppService.registerMyApp(this);
}
...
public setValue(payload){
this.value = payload;
}
}
问题内容: 在我的Angular 2应用中,我具有以下后端服务。 调用此服务后,我想在上一个成功的情况下调用另一个服务。 第二次服务 这两个服务分别返回两个JSON数组。然后,我需要使用这两个数组进行一些登录。 已编辑 服务 然后,我在其他ts文件中使用following来调用服务。 但这会在控制台日志上出现以下错误。 任何建议表示赞赏。 问题答案: 您需要利用操作员在前一个请求完成后调用一个请求
使用Angular 2更改值时,如何调用方法? 我尝试使用ng change,但没有成功。
问题内容: 我是Node.js的新手,但是通过使用它我对套接字流Web框架有了一些了解,我可以轻松地从JavaScript调用服务器端的node.js方法。不使用该框架,我不知道该怎么做。如何从JavaScript调用node.js方法? 以下代码使用套接字流调用服务器端方法。因此,我想在不使用此框架的情况下调用相同的服务器端方法。 问题答案: 我建议使用Socket.IO 服务器端代码 和客户端
问题内容: 我想从React元素的实例中调用React组件公开的方法。 例如,在此jsfiddle中。我想从参考中调用该方法。 有没有一种方法可以实现而无需编写其他包装程序? 编辑 (从JSFiddle复制的代码) 问题答案: 有两种访问内部函数的方法。一个实例级别,如您所愿,另一个静态级别。 实例 您需要在从返回时调用函数。见下文。 静态的 看一下ReactJS Statics。但是请注意,静态
问题内容: 假设我有一个具有子组件的主Vue实例。是否可以从Vue实例外部完全调用属于这些组件之一的方法? 这是一个例子: 因此,当我单击内部按钮时,该方法绑定到其click事件,因此将被调用。无法将事件绑定到外部按钮,我正在使用jQuery监听其单击事件,因此我需要其他一些调用方法。 编辑 看来这可行: 但是,这不是一个好的解决方案,因为我是通过子数组中的索引来引用该组件的,而对于许多组件而言,
我有一个包含服务方法的报警服务服务类。这些方法在警报服务激活时被调用。我想做的是调用这些方法中的另一个类的意图,这些方法在服务类中被调用(当警报关闭时)。它所做的只是在调用意图时标记错误。这只发生在激活警报服务时调用的方法中(服务类中的方法)。这是因为类而不是吗?我不确定,有什么想法吗? (以下是我的服务类,当在方法中调用另一个活动的意图时,应用程序强制关闭。) LogCat上的这些错误之一是: