CognitoUser:属性“ attributes”在类型“ Observable <any>”上不存在

时间:2019-08-15 14:53:37

标签: angular

我正在使用AWS Amplify,我的应用程序在本地(ng serve)中正常工作。 当我尝试运行npm run build:serverless:deploy时出现此错误:

  

src / app / nav / nav.component.html(11,15)中的错误:类型“可观察”的属性“属性”不存在

我的nav.component.ts

....
loggedUser : Observable<CognitoUser|any> = new EmptyObservable();
subscription : Subscription;

ngOnInit() {
    this._authService.currentUser.subscribe(u => {
        if (u && u.username) {
            this.loggedUser = u;
        } else {
            this.loggedUser = new Observable<CognitoUser|any>();
        }
    }); 
}

我的package.json

....
    "build:serverless": "npm run build:browser:serverless && npm run build:server:serverless",
    "build:prod:deploy": "npm run build:prod && npm run deploy",
    "build:serverless:deploy": "npm run build:serverless && npm run deploy",
    "deploy": "serverless deploy",
....

我的nav.component.html

....
<li *ngIf="(loggedUser && loggedUser?.attributes); then logout else login"></li>
.....

1 个答案:

答案 0 :(得分:-1)

您最初将loggedUser声明为可观察对象,因此您得到的错误是完全正确的,attributes在Observable上不存在。

如果我们查看您的进一步实现,则您的loggedUser根本不是可观察的,您在其中订阅了一个可观察的并将其值分配给loggedUser

因此您的loggedUser应该是:

loggedUser = <CognitoUser>{};

现在,当我们初始化您的对象时,我们也不需要在模板中使用安全的导航操作符。您无需具有对其进行初始化,只需保留安全的导航操作符即可:

loggedUser: CognitoUser;

但是我喜欢初始化变量。这是您的选择:)