class Common {
private _observers: Array<Observer> = new Array<Observer>()
private _myData: string
get observers(): Array<Observer> {
return this._observers
}
set observers(value: Array<Observer>) {
this._observers = value
}
get myData(): string {
return this._myData
}
set myData(value: string) {
this._myData = value
this.notifyAllObservers()
}
attach(observer: Observer): void {
this.observers.push(observer)
}
notifyAllObservers(): void {
this._observers.forEach(item => {
item.update()
})
}
}
abstract class Observer {
constructor(common: Common) {
this.common = common
}
common: Common
abstract update(): void
}
class FirstCommon extends Observer {
constructor(common: Common) {
super(common)
common.attach(this)
}
update(): void {
console.log('FirstCommon组件监听到了数据改变:', this.common.myData)
}
}
class SecondCommon extends Observer {
constructor(common: Common) {
super(common)
common.attach(this)
}
update(): void {
console.log('SecondCommon组件监听到了数据改变:', this.common.myData)
}
}
class Test {
constructor() {
let common = new Common()
//组件1监听
new FirstCommon(common)
//组件2监听
new SecondCommon(common)
//测试修改数据
common.myData = '测试文字'
// 输出结果:
// FirstCommon组件监听到了数据改变:测试文字
// SecondCommon组件监听到了数据改变:测试文字
}
}
new Test()
TypeScript实现Vue数据变化监听原理(观察者模式)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.