如何从服务中调用组件方法? (角度2)
How to call component method from service? (angular2)
我想创建可以与一个组件交互的服务。
我的应用程序中的所有其他组件都应该能够调用此服务,并且此服务应该与此组件交互。
如何从服务调用组件方法?
@Component({
selector:'component'
})
export class Component{
function2(){
// How call it?
}
}
从这个发球?
@Injectable()
export class Service {
callComponentsMethod() {
//From this place?;
}
}
组件之间的交互确实可以通过服务来实现。您需要将用于组件间通信的服务注入所有需要使用它的组件(所有调用者组件和被调用者方法),并利用 Observables 的属性。
共享服务可能如下所示:
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class CommunicationService {
// Observable string sources
private componentMethodCallSource = new Subject<any>();
// Observable string streams
componentMethodCalled$ = this.componentMethodCallSource.asObservable();
// Service message commands
callComponentMethod() {
this.componentMethodCallSource.next();
}
}
示例:
发件人:
callMethod = function () {
this.communicationService.callComponentMethod();
}
接收方:
this.communicationService.componentMethodCalled$.subscribe(() => {
alert('(Component2) Method called!');
});
我创建了一个基本示例 here,在其中单击 Component1 中的按钮将调用 Component2 中的方法。
如果您想阅读更多关于该主题的内容,请参阅专门的文档部分:https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service
因为这个post有点老了,我实现了帝舵的回应
stackblitz
服务
private customSubject = new Subject<any>();
customObservable = this.customSubject.asObservable();
// Service message commands
callComponentMethod(value:any) {
this.customSubject.next(value);
}
主要成分
constructor(private communicationService:CommunicationService){}
ngOnInit()
{
this.communicationService.customObservable.subscribe((res) => {
this.myFunction(res)
}
);
}
myFunction(res:any)
{
alert(res)
}
调用服务方法的另一个组件
constructor( private communicationService: CommunicationService ) { }
click() {
this.communicationService.callComponentMethod("hello word");
}
问题不询问组件交互,它询问从服务调用组件方法。
这可以简单地通过向组件注入服务来实现。然后在服务中定义一个方法,该方法将函数作为参数。该方法应将此函数保存为 属性 服务,并在需要的任何地方调用它。
// -------------------------------------------------------------------------------------
// codes for component
import { JustAService} from '../justAService.service';
@Component({
selector: 'app-cute-little',
templateUrl: './cute-little.component.html',
styleUrls: ['./cute-little.component.css']
})
export class CuteLittleComponent implements OnInit {
s: JustAService;
a: number = 10;
constructor(theService: JustAService) {
this.s = theService;
}
ngOnInit() {
this.s.onSomethingHappended(this.doThis.bind(this));
}
doThis() {
this.a++;
console.log('yuppiiiii, ', this.a);
}
}
// -------------------------------------------------------------------------------------
// codes for service
@Injectable({
providedIn: 'root'
})
export class JustAService {
private myFunc: () => void;
onSomethingHappended(fn: () => void) {
this.myFunc = fn;
// from now on, call myFunc wherever you want inside this service
}
}
我想创建可以与一个组件交互的服务。 我的应用程序中的所有其他组件都应该能够调用此服务,并且此服务应该与此组件交互。
如何从服务调用组件方法?
@Component({
selector:'component'
})
export class Component{
function2(){
// How call it?
}
}
从这个发球?
@Injectable()
export class Service {
callComponentsMethod() {
//From this place?;
}
}
组件之间的交互确实可以通过服务来实现。您需要将用于组件间通信的服务注入所有需要使用它的组件(所有调用者组件和被调用者方法),并利用 Observables 的属性。
共享服务可能如下所示:
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class CommunicationService {
// Observable string sources
private componentMethodCallSource = new Subject<any>();
// Observable string streams
componentMethodCalled$ = this.componentMethodCallSource.asObservable();
// Service message commands
callComponentMethod() {
this.componentMethodCallSource.next();
}
}
示例:
发件人:
callMethod = function () {
this.communicationService.callComponentMethod();
}
接收方:
this.communicationService.componentMethodCalled$.subscribe(() => {
alert('(Component2) Method called!');
});
我创建了一个基本示例 here,在其中单击 Component1 中的按钮将调用 Component2 中的方法。
如果您想阅读更多关于该主题的内容,请参阅专门的文档部分:https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service
因为这个post有点老了,我实现了帝舵的回应 stackblitz
服务
private customSubject = new Subject<any>();
customObservable = this.customSubject.asObservable();
// Service message commands
callComponentMethod(value:any) {
this.customSubject.next(value);
}
主要成分
constructor(private communicationService:CommunicationService){}
ngOnInit()
{
this.communicationService.customObservable.subscribe((res) => {
this.myFunction(res)
}
);
}
myFunction(res:any)
{
alert(res)
}
调用服务方法的另一个组件
constructor( private communicationService: CommunicationService ) { }
click() {
this.communicationService.callComponentMethod("hello word");
}
问题不询问组件交互,它询问从服务调用组件方法。
这可以简单地通过向组件注入服务来实现。然后在服务中定义一个方法,该方法将函数作为参数。该方法应将此函数保存为 属性 服务,并在需要的任何地方调用它。
// -------------------------------------------------------------------------------------
// codes for component
import { JustAService} from '../justAService.service';
@Component({
selector: 'app-cute-little',
templateUrl: './cute-little.component.html',
styleUrls: ['./cute-little.component.css']
})
export class CuteLittleComponent implements OnInit {
s: JustAService;
a: number = 10;
constructor(theService: JustAService) {
this.s = theService;
}
ngOnInit() {
this.s.onSomethingHappended(this.doThis.bind(this));
}
doThis() {
this.a++;
console.log('yuppiiiii, ', this.a);
}
}
// -------------------------------------------------------------------------------------
// codes for service
@Injectable({
providedIn: 'root'
})
export class JustAService {
private myFunc: () => void;
onSomethingHappended(fn: () => void) {
this.myFunc = fn;
// from now on, call myFunc wherever you want inside this service
}
}