Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.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
Javascript Angular2,EventEmitter上的subscribe属性不存在?_Javascript_Html_Angular_Typescript_Event Handling - Fatal编程技术网

Javascript Angular2,EventEmitter上的subscribe属性不存在?

Javascript Angular2,EventEmitter上的subscribe属性不存在?,javascript,html,angular,typescript,event-handling,Javascript,Html,Angular,Typescript,Event Handling,我的应用程序组件包含网站的,它使用[routerLink]转到不同的页面。它导入每个页面的组件。其中一个页面是登录页面。如果用户未登录,我希望导航显示为登录-如果用户是,则注销 在应用程序组件中: my_userO : userO = undefined; constructor (private my_userS:userS){ my_userS.userChanged.suscribe(temp => this.updateNav()); updateNav(){

我的
应用程序组件
包含网站的
,它使用
[routerLink]
转到不同的页面。它导入每个页面的组件。其中一个页面是登录页面。如果用户未登录,我希望导航显示为登录-如果用户是,则注销

应用程序组件中

my_userO : userO = undefined;

constructor (private my_userS:userS){
    my_userS.userChanged.suscribe(temp => this.updateNav());

updateNav(){ 
    this.my_userO = this.my_userS.getUser(); 
}

logOut(){
    this.my_userS.setUser(undefined);
}
在其模板中:

<li><a *ngIf="!my_userO" [routerLink]="['LoginPage']">Login</a></li>
<li><a *ngIf="my_userO" [routerLink]="['HomePage']"(click)="logOut()">Logout</a></li>
在登录页面中,我只需运行
getLogin
,然后使用前者返回的内容运行
setUser


我的问题是,我得到了错误“类型EventEmitter上不存在属性suscribe”

它没有subscribe方法,因为它不返回可观察的

然而,
EventEmitter
emit()
方法确实返回一个可观察的,因此您需要创建一个连接到所发射事件的输入。 然后你可以订阅这个

看看这个:

这是一个打字错误

使用
订阅
,而不是
订阅

我没有足够的声誉来回答下面的科伦,但这是完全错误的

  • emit()
    返回void
  • EventEmitter
    扩展(继承)
    Subject
    ,它是一个可观察者和观察者

    export declare class EventEmitter<T> extends Subject<T>
    
    导出声明类EventEmitter扩展主题
    
  • EventEmitter
    是一个经过一些修改的rxjs主题,最明显的是它不使用next()沿流发送值,而是使用emit()。
    它还允许设置一个异步逻辑,其中发射将是异步的。

    检查EventEmitter的导入


    它应该是从'@angular/core'导入{EventEmitter}

    使用vscode,自动完成添加了此行:

    从事件导入{EventEmitter}

    我必须将其更改为以下内容才能解决此问题:

    从“@angular/core”导入{EventEmitter}”


    谢谢很抱歉,我不知道为什么它不起作用,因为我在遵循其他人的示例,然后angular.io文档显示了subscribe属性。。。我需要更多的睡眠,哈哈。它现在可以编译了,但我要等到以后才能测试。啊。。。dat facepalm当我至少半个小时都不明白为什么suscribe没有定义时…关于emit()的评论救了我一天。谢谢
    export declare class EventEmitter<T> extends Subject<T>