2016-07-09 28 views
5

Gần đây tôi đã chuyển sang Angular 2 từ Angular 1 và thường gặp các vấn đề cố gắng phát hiện các thay đổi trong thuộc tính của đối tượng (một cái gì đó được thực hiện trước đó thông qua $ watch).Quan sát sự thay đổi trong một thuộc tính đối tượng trong Angular 2

Các trường hợp sử dụng điển hình là tôi sẽ có một dịch vụ tiêm duy trì một phần dữ liệu, ví dụ một đối tượng chứa các thiết lập:

@Injectable() 
export class SettingsService 
{ 
    _settings = { 
     'settingA' : true, 
     'settingB' : false 
    } 

    ... 

    get settings() 
    { 
     return this._settings; 
    } 
} 

sau đó tôi sẽ có một phần như một trang cài đặt trong một ứng dụng Ionic rằng sẽ nhận được các thiết lập từ các dịch vụ cài đặt:

constructor(private settingsService : SettingsService) 
{ 
    this.settings = settingsService.settings; 
} 

Và trực tiếp vài các thuộc tính đối tượng để một thành phần giao diện người dùng giống như một toggle. Vấn đề khác với việc gọi một hàm trên mỗi sự kiện thay đổi chuyển đổi như thế nào hoặc dịch vụ hoặc thành phần biết rằng đối tượng cài đặt đã thay đổi để kích hoạt một hành động thích hợp như lưu cài đặt vào kho dữ liệu?

Trả lời

6

Để tạo dịch vụ dữ liệu quan sát, bạn có thể sử dụng BehaviorSubject từ rxjs. Bạn tạo một chủ đề trong dịch vụ của bạn và sau đó bạn phải đăng ký chủ đề này trong các thành phần của bạn.

Hãy xem tại đây để biết một số hướng dẫn về cách tạo dịch vụ với nó: example 1, example 2.

Bạn có lý thuyết về cơ hội sử dụng EventEmitter trong dịch vụ của mình. Nhưng bạn không nên sử dụng nó. Hãy xem điều này answer để biết thêm chi tiết. Trong câu trả lời này, bạn có thể tìm thấy cũng là một ví dụ làm thế nào để giải quyết nó bằng cách sử dụng Observable thay vì BehaviorSubject

+0

Dường như sử dụng một BehaviorSubject vẫn đòi hỏi một cuộc gọi chức năng khi chuyển đổi thay đổi trạng thái chứ không chỉ có khả năng đón sự thay đổi trong dịch vụ . Tốt ghi chú về việc sử dụng EventEmitter mặc dù, tôi đã sử dụng chúng ở nơi khác để thông báo cho các thành phần của dữ liệu cập nhật trong các dịch vụ. – cubiclewar

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