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

Tại sao Angular sử dụng phân đoạn URL?

junior

Service trong Angular là gì?

expert

Bạn sẽ so sánh View EngineIvy như thế nào?

Bình luận

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

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