如何在页面上重新加载行为主题数据

时间:2018-03-15 13:02:40

标签: angular rxjs angular2-services behaviorsubject

我有一个呈现房地产属性的组件(properties.component.html)。当用户单击特定属性时,我将行为主题设置为等于此属性。

private property = new BehaviorSubject<Property>();

setProperty(property) {
  this.property.next(property);
}

组件(property.component.html)可以很好地使用行为主题从服务中的observable返回的数据。

this.propertyService.getProperty()
  .subscribe((property) => {
     this.currentProperty = property;
  })

我的问题:当页面重新加载时,行为主题现在是空的?&#39;没有数据,因为点击时会在properties.component.html中调用.next(property)。

应用程序如何在页面刷新/重新加载时保存数据?

另一张海报提到将localStorage中的属性存储为字符串化的JSON。如果这是解决方案,那么用户如何通过直接访问https://www.myapp.com/property/1234来访问此特定属性?

1 个答案:

答案 0 :(得分:1)

不是最优雅的解决方案,但你可以这样做:

@Injectable()
export class PropertyService {

    private property = new ReplaySubject<Property>(1);

    constructor() {
        let storedProp = localStorage.get('storedProp');
        if (storedProp)
            setProperty(JSON.parse(storedProp), false);
    }

    setProperty(property: Property, storeProp: boolean = flse) {
        if (storeProp)
            localStorage.set('storedProp', JSON.stringify(property);
        this.property.next(property);
    }

    getProperty() {
        return this.property;
    }
}

订阅者只要通过getProperty()订阅proptery就会获得值.subsubbe()。