gpt4 book ai didi

angular - Typescript Angular - 可观察到的 : how to change its value?

转载 作者:太空狗 更新时间:2023-10-29 16:50:17 26 4
gpt4 key购买 nike

也许我遗漏了什么。我找不到 Observable 及其语法的简单教程。我正在使用 Angular,我需要从服务调用函数(在组件中定义)。我读了这个solution .但是我不知道如何更改服务中创建的 Observable 中的值(也许创建不是最好的方法)。

我有一个类似解决方案的组件:

@Component({
selector: 'my-component',
...
)}
export class MyComponent {
constructor(myService:MyService) {
myService.condition.subscribe(value => doSomething(value));
}

doSomething(value) {
if (value) // do stuff
else // other stuff
}

这是我的服务:

import { Injectable } from '@angular/core';
import { Observable} from 'rxjs/Observable';

@Injectable()

export class MyService {
private condition: Observable<boolean>;
constructor() {
this.condition= new Observable(ob => {ob.next(false); })
// maybe ob.next is not the best solution to assign the value?
}

change() {// how can i change the value of condition to 'true', to call
// the doSomething function in the component??
}

}

最佳答案

来自 my other answer 的评论(保留,因为它可能对某人有帮助),您似乎想利用某物的力量随着时间的推移发出值(value)。

正如 DOMZE 所建议的那样,使用主题,但这里有一个(简单的)示例显示如何您可以做到这一点。虽然显然有 some pitfalls to avoid in using Subject directly ,我会把它留给你。

import { Component, NgModule } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser'
import { Observable, Subject } from 'rxjs/Rx';

@Component({
selector: 'my-app',
template: `
<div>
<h2>Open the console.</h2>
</div>
`,
})
export class App {

constructor() {}

let subject = new Subject();

// Subscribe in Component
subject.subscribe(next => {
console.log(next);
});

setInterval(() => {
// Make your auth call and export this from Service
subject.next(new Date())
}, 1000)
}

@NgModule({
imports: [ BrowserModule ],
declarations: [ App ],
bootstrap: [ App ]
})
export class AppModule {}

Plunker

以我的愚见,对于这种情况,我不明白为什么一个简单的服务/可观察对象是不够的,但这不关我的事。

进一步阅读:Angular 2 - Behavior Subject vs Observable?

关于angular - Typescript Angular - 可观察到的 : how to change its value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42512502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com