【问题标题】:Observing a change in an object property in Angular 2在 Angular 2 中观察对象属性的变化
【发布时间】:2016-07-09 19:22:18
【问题描述】:

我最近从 Angular 1 迁移到 Angular 2,并且在尝试检测对象属性的变化时经常遇到问题(以前通过 $watch 完成的事情)。

典型的用例是我将有一个可注入的服务来维护一段数据,例如一个包含设置的对象:

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

   ...

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

然后,我将在 Ionic 应用程序中拥有一个组件,例如设置页面,该组件将从设置服务获取设置:

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

并直接将对象属性耦合到 UI 组件,例如 toggle。问题不是在每个切换更改事件上调用一个函数,服务或组件如何知道设置对象已更改以触发适当的操作,例如将设置保存到数据存储?

【问题讨论】:

    标签: angular


    【解决方案1】:

    要构建一个可观察的数据服务,您可以使用来自rxjsBehaviorSubject。您在您的服务中创建一个主题,然后您必须在您的组件中订阅该主题。

    在此处查看有关使用它创建服务的一些教程:example 1example 2

    理论上,您有机会在您的服务中使用EventEmitter。但你不应该使用它。看看这个answer 了解更多详情。在这个答案中,您还可以找到一个如何使用 Observable 而不是 BehaviorSubject 来解决它的示例

    【讨论】:

    • 似乎使用 BehaviorSubject 在切换状态更改时仍需要函数调用,而不仅仅是能够获取服务中的更改。虽然使用 EventEmitter 的注意事项很好,但我在其他地方使用它们来通知服务中的数据更新组件。
    • 我遇到了同样的问题..您找到解决方案了吗?
    猜你喜欢
    • 2017-09-07
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多