Điều này không trả lời trực tiếp câu hỏi, nhưng trong những dịp khác nhau, tôi đã trả lời câu hỏi Stack Overflow này để giải quyết vấn đề tôi sẽ sử dụng đồng hồ $ cho angularJs. Tôi đã kết thúc bằng cách sử dụng một cách tiếp cận khác so với mô tả trong các câu trả lời hiện tại và muốn chia sẻ nó trong trường hợp ai đó thấy nó hữu ích.
Kỹ thuật tôi sử dụng để đạt được điều gì đó tương tự $watch
là sử dụng BehaviorSubject
( thêm về chủ đề ở đây ) trong dịch vụ Angular và để các thành phần của tôi đăng ký với nó để có được (xem) các thay đổi. Điều này tương tự như $watch
trong angularJs, nhưng đòi hỏi một số thiết lập và hiểu biết nhiều hơn.
Trong thành phần của tôi:
export class HelloComponent {
name: string;
// inject our service, which holds the object we want to watch.
constructor(private helloService: HelloService){
// Here I am "watching" for changes by subscribing
this.helloService.getGreeting().subscribe( greeting => {
this.name = greeting.value;
});
}
}
Trong dịch vụ của tôi
export class HelloService {
private helloSubject = new BehaviorSubject<{value: string}>({value: 'hello'});
constructor(){}
// similar to using $watch, in order to get updates of our object
getGreeting(): Observable<{value:string}> {
return this.helloSubject;
}
// Each time this method is called, each subscriber will receive the updated greeting.
setGreeting(greeting: string) {
this.helloSubject.next({value: greeting});
}
}
Đây là một bản demo trên Stackblitz