Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 6 RxJs:尝试将obj作为可观察对象,以便在其他组件中使用 服务 问题_Angular_Rxjs6_Subject Observer - Fatal编程技术网

Angular 6 RxJs:尝试将obj作为可观察对象,以便在其他组件中使用 服务 问题

Angular 6 RxJs:尝试将obj作为可观察对象,以便在其他组件中使用 服务 问题,angular,rxjs6,subject-observer,Angular,Rxjs6,Subject Observer,我正试图建立一个可观察的系统,以便从许多组件读取和写入。如上所述;我在服务中设置了observable,但我的组件getMode()不工作。你知道为什么吗?你的架构是正确的,但我认为你应该使用BehaivourSubject而不是Subject 试试这个: import { BehaviorSubject } from 'rxjs/BehaviorSubject'; 服务 mode: BehaviorSubject<any> = new BehaviorSubject<any

我正试图建立一个可观察的系统,以便从许多组件读取和写入。如上所述;我在服务中设置了observable,但我的组件
getMode()
不工作。你知道为什么吗?

你的架构是正确的,但我认为你应该使用
BehaivourSubject
而不是
Subject

试试这个:

import { BehaviorSubject } from 'rxjs/BehaviorSubject';
服务

mode: BehaviorSubject<any> = new BehaviorSubject<any>(null);

    constructor(public http: HttpClient) {
        this.setMode({ // defaults
            admin: this.admins.includes(localStorage.getItem("email")),
            edit: false,
            dev: false
        });
    }

    getMode() {
        return this.mode.asObservable();
    }

    setMode(value) {
        this.mode.next(value);
    }

mode:BehaviorSubject

您的架构是正确的,但我认为您应该使用
behavioursubject
而不是
Subject

试试这个:

import { BehaviorSubject } from 'rxjs/BehaviorSubject';
服务

mode: BehaviorSubject<any> = new BehaviorSubject<any>(null);

    constructor(public http: HttpClient) {
        this.setMode({ // defaults
            admin: this.admins.includes(localStorage.getItem("email")),
            edit: false,
            dev: false
        });
    }

    getMode() {
        return this.mode.asObservable();
    }

    setMode(value) {
        this.mode.next(value);
    }
模式:行为主体

我想这应该行得通

我通过修改叉子做了类似的事情

我想这应该行得通


我通过修改fork做了类似的事情。

您可能需要使用
ReplaySubject
而不是如何将服务注入到组件中?该服务在getMode模式下工作,但不工作。我不明白你为什么要在订阅之前更新
主题。您必须将其类型切换为
ReplaySubject
BehaviorSubject
,以达到所需的效果。主题具有不同的行为,您可能需要使用
ReplaySubject
而不是如何将服务注入组件?服务在getMode模式下工作,但该模式不工作。我不明白你为什么要在订阅之前更新
主题。您必须将其类型切换为
ReplaySubject
BehaviorSubject
,以达到所需的效果。受试者有不同的行为模式:行为主体=新行为主体()
获取错误
预期为1个参数,但得到0。
抱歉,构造函数需要一个参数,但您可以传递null,我的答案中已修复此错误,现在可以使用了。我不知道为什么。很高兴看到关于何时使用
主题
行为主题
的解释。。。不管怎样谢谢你!您可以在此处阅读更多信息:摘要是:
Subject
仅通知订阅者和
BehaviorSubject
通知并发送值
mode:BehaviorSubject=new BehaviorSubject()
获取错误
预期为1个参数,但得到0。
抱歉,构造函数需要一个参数,但您可以传递null,我的答案中已修复此错误,现在可以使用了。我不知道为什么。很高兴看到关于何时使用
主题
行为主题
的解释。。。不管怎样谢谢你!您可以在此处阅读更多信息:摘要是:
Subject
仅通知订阅者和
BehaviorSubject
通知并发送值
editToggle(e) {
this.mode.edit = e.target.checked; // err: cant edit `mode` because it 
// never set.
this.bcAuthService.setMode(e.target.checked);
}