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()
返回voidEventEmitter
扩展(继承)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>