首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular2-Meteor *ngIf使用Meteor.userId()不主动更新

Angular2-Meteor *ngIf使用Meteor.userId()不主动更新
EN

Stack Overflow用户
提问于 2017-02-05 16:04:26
回答 2查看 202关注 0票数 2

我仍然是非常新的angular2-meteor,并正在尝试一个简单的自定义登录按钮组件。当没有用户登录时,我希望显示“注册”和“登录”按钮,并在用户登录时显示“注销”按钮。这看起来应该很简单,但不像我所期望的那样有效。

以下是我的组件html:

代码语言:javascript
复制
<div *ngIf="!isLoggedIn()">
    <button class="btn btn-outline-primary btn-sm" (click)="goToLoginForm()">Log In</button>
    <button class="btn btn-success btn-sm">Sign Up</button>
</div>

<div *ngIf="isLoggedIn()">
    <button class="btn btn-outline-danger btn-sm" (click)="logout()">Log Out</button>
</div>

这是我的打字稿:

代码语言:javascript
复制
import {Component} from "@angular/core";
import template from "./login-buttons.component.html";
import {Router} from "@angular/router";

@Component({
    selector: "login-buttons",
    template
})
export class LoginButtonsComponent {

    constructor(private router: Router) {}

    isLoggedIn(): boolean {
        return !!Meteor.user();
    }

    goToLoginForm(): void {
        this.router.navigateByUrl('/login');
    }

    logout(): void {
        Meteor.logout((error) => {
            if (error) {
                console.log(error);
            } else {
                this.router.navigateByUrl("/");
            }
        });
    }
}

我肯定我错过了一些很简单的东西,但这让我无法理解。所有的帮助都是感激的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-05 16:13:01

你的问题可以有这么多答案。您可以使用用户注入,这非常简单。首先,应该使用Meteor.userId();

代码语言:javascript
复制
 isLoggedIn(): boolean {
            return !!Meteor.userId();
        }

下面这个是标准答案。

代码语言:javascript
复制
import {Component} from "@angular/core";
import template from "./login-buttons.component.html";
import {Router} from "@angular/router";
import { InjectUser } from 'angular2-meteor-accounts-ui';//<--**** import this****

@Component({
    selector: "login-buttons",
    template
})
@InjectUser('user') //<--*** add this***
export class LoginButtonsComponent {
    user: Meteor.User; //<--*** add this ***
    constructor(private router: Router) {}

    isLoggedIn(): boolean {
        return !!Meteor.user();
    }

    goToLoginForm(): void {
        this.router.navigateByUrl('/login');
    }

    logout(): void {
        Meteor.logout((error) => {
            if (error) {
                console.log(error);
            } else {
                this.router.navigateByUrl("/");
            }
        });
    }
}

你的html应该是这样的

代码语言:javascript
复制
<div *ngIf="!user">
    <button class="btn btn-outline-primary btn-sm" (click)="goToLoginForm()">Log In</button>
    <button class="btn btn-success btn-sm">Sign Up</button>
</div>

<div *ngIf="user">
    <button class="btn btn-outline-danger btn-sm" (click)="logout()">Log Out</button>
</div>
票数 1
EN

Stack Overflow用户

发布于 2017-02-05 23:12:58

助手isLoggedIn可以作为属性来处理,从UI调用它是没有意义的。换句话说,只需从ngIf中删除方括号即可。您可以将html修改为如下所示

代码语言:javascript
复制
<div *ngIf="isLoggedIn">
    <button class="btn btn-outline-danger btn-sm" (click)="logout()">Log Out</button>
</div>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42054189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档