2016-02-22 22 views
6

Tôi khá mới đối với Observables. Làm thế nào tôi có thể tạo ra Observable chỉ từ một chuỗi đơn giản? Sau đó, đăng ký với nó và xuất nó khi nó thay đổi.Quan sát được từ một chuỗi (Angular 2)

Điều đó có hợp lý không?

Tôi không có bất kỳ may mắn nào với tìm kiếm của Google. Có thể là từ khóa sai?


Thêm một số mã cho lời giải thích tốt hơn:

My constructor on service 

constructor() { 
    // Create observable stream to output our data 
    this.notice = Observable.create(
    (observer) => this.observer = observer; 
); 
}; 

My method on service 

set(string) { 
    this.notice.subscribe((value) => { 
    // Push the new value into the observable stream 
    this.observer.next(string); 
    }, (error) => console.log('Could not set data.')); 
} 

Calling service method 

setNotice(event) { 
    event.preventDefault(); 

    // Calling service to set notice 
    this.noticeService.set('This is a string'); 
} 

Tôi nghĩ rằng tôi đang làm một cái gì đó sai ở đây? Nhưng không chắc chắn làm thế nào để yêu cầu. Tôi sẽ biết ơn vì bất kỳ lời giải thích nào.

+0

Waht về this.notice.unsubscribe() trong ngDestroy() cũng vậy? Tôi biết đó là nguyên nhân phổ biến của rò rỉ bộ nhớ cho các trình nghe sự kiện được thêm theo cách thủ công ... Vì vậy, tôi cho rằng điều này sẽ giống nhau. – JGFMK

+0

Tôi cũng sẽ xem xét BehaviorSubject quá cho việc này. https://stackoverflow.com/questions/39494058/behaviorsubject-vs-observable – JGFMK

Trả lời

12

Bạn có thể sử dụng phương pháp of của lớp Observable:

var obs = Observable.of('some string'); 

Sửa

Về quy tắc ứng dịch vụ của bạn, tôi woulsd Refactor mã của phương pháp set của bạn như thế này:

set(string) { 
    this.observer.next(string); 
} 

Bạn có thể đăng ký trên notice tài sản trong một phần khác của ứng dụng của bạn sẽ được thông báo.

+0

cảm ơn bạn đã hiển thị điều này. Tôi tự hỏi làm thế nào để làm cho 'một số chuỗi' như là một giá trị của biến có thể thay đổi. Làm thế nào để đẩy nó bên trong Observable sau đó? –

+0

Trong thực tế, bạn không thể. Điều đó nói rằng bạn có thể kích hoạt sự kiện khi giá trị thay đổi. Đối với điều này, bạn cần phải tạo ra một quan sát thô: 'Observable.create ((observer) => {observer.next ('một số chuỗi');});'. Phương thức 'next' có thể được gọi nhiều lần ... Lưu ý rằng bạn có thể đặt biến' observer' thành một biến bên ngoài gọi lại. –

+0

Cảm ơn bạn một lần nữa. Tôi đã thêm một số mã ở trên. –

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