Câu hỏi phỏng vấn Angular
Câu hỏi

Có phải không có tương đương cho **$scope.emit()*...

Câu trả lời

Trong AngularJS, $scope.emit() và $scope.broadcast() là hai phương thức quan trọng được sử dụng để giao tiếp giữa các thành phần trong ứng dụng thông qua cơ chế xuất bản/đăng ký (publish/subscribe). Tuy nhiên, khi chuyển sang Angular (phiên bản 2 trở lên), cơ chế giao tiếp giữa các thành phần đã thay đổi đáng kể và không còn sử dụng $scope như trong AngularJS.

Angular sử dụng một hệ thống giao tiếp dựa trên các dịch vụ (services) và EventEmitter để thay thế cho $scope.emit() và $scope.broadcast(). Cụ thể, để giao tiếp giữa các thành phần không có mối quan hệ trực tiếp (ví dụ như cha-con, anh em), Angular khuyến khích sử dụng các dịch vụ có thể chứa EventEmitter. Các thành phần có thể đăng ký lắng nghe sự kiện từ EventEmitter này và phát ra sự kiện khi cần thông qua phương thức emit() của EventEmitter.

Ví dụ, trong Angular, bạn có thể tạo một dịch vụ giao tiếp như sau:

typescript Copy
import { Injectable, EventEmitter } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class CommunicationService {
  eventEmitter: EventEmitter<any> = new EventEmitter();

  sendEvent(data: any) {
    this.eventEmitter.emit(data);
  }
}

Các thành phần khác có thể đăng ký lắng nghe sự kiện từ dịch vụ này...

expert

expert

Gợi ý câu hỏi phỏng vấn

expert

Sự khác biệt giữa BehaviorSubjectObservable là gì?

middle

Sự khác biệt giữa StructuralAttribute trong Angular là gì?

expert

Locality principle cho Ivy là gì?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào