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

middle

Lựa chọn nào để chọn giữa External template file và* External*?

expert

Tại sao Incremental DOM có thể được Tree Shaking?

senior

Sử dụng dịch vụ NgZone cho mục đích gì là tốt?

Bình luận

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

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