【问题标题】:How to declare an observable on angular2如何在 angular2 上声明一个 observable
【发布时间】:2016-02-07 17:09:36
【问题描述】:


我如何声明一个 observable 以及如何在 angular2 中向它添加数据? 我有 5 个小时试图弄清楚如何去做。
我试过了

this.products : Observable<array>;
var object = {"item":item};
this.products.subscribe(object)

我尝试的每件事都会给我一个错误


我想使用它,因为我有一个经常更改的对象数组,并且在模板中 ngFor 没有更改值。 有什么帮助吗?

http://pastebin.com/1cFXJHHk 这是我尝试做的事情

【问题讨论】:

  • 我建议提供一个演示该问题的 plnkr。否则不清楚,可能是什么问题。
  • 我提供了一个 pastebin .. 我相信当你看到它时你会得到正确的答案。
  • 根据您的 pastebin,我认为您根本不需要使用 Observables(除了 Http)。您可以单独使用@Input 绑定(也可以使用@Output 绑定)来完成您需要的所有操作。我仍然不清楚您要如何或为什么要使用 Observables。
  • 如果我使用数组,当我更改数组的值时模板不会改变,正如我在互联网上看到的那样,我应该使用 observables 。我错了吗?
  • 默认情况下应该自动更新数组绑定。如果它没有更新,则可能与您的代码有关。这不应该成为使用 observables 的理由。

标签: typescript angular


【解决方案1】:

@pixelbits 提供了一个很好的答案,描述了使用原始 observables 的方式。

但我认为您误解了可观察对象和反应式编程是什么。您可以先看看这个很棒的介绍:

obersables 的subscribe 方法允许注册通知回调:

  • 事件回调的第一个参数
  • 关于错误的第二个回调
  • 完成的最后一个

当然,您可以利用事件在列表中添加元素,但我不确定这是您的用例:

var someList = [];
let observable = (...)
observable.subscribe(data => {
  someList.push(data);
});

这对于 WebSockets、Firebase 等基于事件的工具/技术特别有用……上面的 observable 将链接到它们。这个答案可以为您提供有关如何使用 Firebase 实现此功能的更多详细信息:

【讨论】:

    【解决方案2】:

    如果要创建 Observable(冷),可以使用 create 方法:

    myEvent:Rx.Observable<{item:Item}>;
    myObserver: Rx.Observer<{item:Item}>;
    constructor() {
        this.myEvent = Rx.Observable.create(o=>this.myObserver = o);
    }
    someEvent() {
        // do something
        var $event = {item:new Item()};
    
        // emit the event object when something interesting happens
        if(this.myObserver)
            this.myObserver.emit($event);
    }
    

    【讨论】:

    • 这看起来很复杂。它适用于 ngFor 频繁变化的可观察对象?
    • 这就是我需要它的原因
    • 我猜是否使用 Observable 取决于您的用例。您可以在组件内部使用 EventEmitters,如果我记得它类似于 ReplaySubject。
    猜你喜欢
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    相关资源
    最近更新 更多