Angular2,跨组件持久化服务结果

时间:2016-09-20 00:44:41

标签: angular

尝试为Angular 2应用程序创建登录服务(AuthService),并且我一直在遇到我不期望的事情。我想要完成的是拥有一个用户对象,在登录后,在应用程序的各个地方使用。如果用户注销并重新登录,则用户应通过在ngOnInit功能中获取其他组件来更改其他组件。

class Service {
    private user: User;
    constructor(private http: Http) {

    }

    login(user, pass) {
        //login stuff, set this.user;
    }

    getUser() {
        return this.user
    }
}

我在bootstrap

中声明了一次服务
const SERVICE_PROVIDERS = [
    AuthService
]

@NgModule({
    bootstrap: [App],
    providers: [
        SERVICE_PROVIDERS
    ]
}) 

然后我在几个组件中使用它。想想路线周围的警卫,显示基本用户详细信息或在某处​​显示登录人员的姓名等内容。用法如下:

export class Login {
    user: User;
    constructor(private router: Router, private authService: AuthService) {

    }

    ngOnInit() {
         this.user = this.auth.getUser();
    }
}

这样,AuthService在每个组件中实例化一次。这样,用户在注销并返回时也不会更改。所以,我知道我的Login组件上的服务对象中的用户变量已经更改,但是当我在那里导航时,ngOnInit仍然提取旧的用户对象。我的路线周围的警卫也使用旧用户。

修改 看起来每个组件都有自己的服务实例,这意味着它们都有自己的user实例。每次我想要登录用户时,我都不想回到我的数据库。

1 个答案:

答案 0 :(得分:1)

你可以在下面试试,

(\\d+)

希望这会有所帮助!!