6

Tôi muốn tạo dịch vụ, có thể tương tác với một thành phần. Tất cả các thành phần khác trong ứng dụng của tôi, sẽ có thể gọi dịch vụ này và dịch vụ này sẽ tương tác với thành phần này.Cách gọi phương thức thành phần từ dịch vụ? (angular2)

Cách gọi phương thức thành phần từ dịch vụ?

@Component({ 
    selector:'component' 
}) 
export class Component{ 

    function2(){ 
    // How call it? 
    } 
} 

Từ dịch vụ này?

@Injectable() 

export class Service { 


    callComponentsMethod() { 
    //From this place?; 
     } 
} 
+0

Bạn nên trích xuất các 'phương pháp callComponentsMethod' vào một dịch vụ và sau đó tiêm dịch vụ cho cả hai nơi –

Trả lời

8

Tương tác giữa các thành phần có thể thực sự đạt được khi sử dụng dịch vụ. Bạn sẽ cần phải tiêm dịch vụ sử dụng cho giao tiếp giữa các thành phần vào tất cả các thành phần cần sử dụng nó (tất cả các thành phần của người gọi và phương thức callee) và sử dụng các thuộc tính của Observables.

Các dịch vụ chia sẻ có thể trông giống như thế này:

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(); 
    } 
} 

tôi đã tạo ra một ví dụ cơ bản here, nơi cách nhấp vào một nút từ Component1 sẽ gọi một phương thức từ Component2.

Nếu bạn muốn đọc thêm về chủ đề này, xin vui lòng tham khảo phần tài liệu chuyên dụng: https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service

+0

Nó kêu gọi callComponentMethod , nhưng không gọi componentMethodCallSource. Bạn có biết tại sao không? –

+0

Tôi không thực sự hiểu câu hỏi của bạn. Kết quả cuối cùng là Component1 gọi một phương thức từ Component2. Đó không phải là những gì bạn cần? –

+0

Tôi không hiểu tại sao, nhưng không gọi hàm cần thiết. –

Các vấn đề liên quan