2016-10-13 6 views
0

Я довольно новичок в Angular 2, и у меня есть небольшая проблема. У меня есть компонент заголовка, в заголовке я хочу использовать ngIf, потому что на экране входа я скрою заголовок (navbar). Кроме того, я хочу скрыть некоторые вещи из заголовка, в зависимости от профиля пользователя.Angular2 Подпишитесь на глобальную переменную

Для хранения, если пользователь вошел в систему, у меня есть глобальная служба по имени variables.ts, который выглядит следующим образом:

import { Injectable } from '@angular/core'; 

@Injectable() 
export class Variables { 
    private url = "..."; 
    private username; 
    private password; 
    private isLoggedIn = false; 

    constructor() {} 

    setUrl(val) { 
     this.url = val; 
    } 
    getUrl() { 
     return this.url; 
    } 

    setUsername(val) { 
     this.username = val; 
    } 
    getUsername() { 
     return this.username; 
    } 

    setPassword(val) { 
     this.password = val; 
    } 
    getPassword() { 
     return this.password; 
    } 

    setIsLoggedIn(val) { 
     this.isLoggedIn = val; 
    } 
    getIsLoggedIn() { 
     return this.isLoggedIn; 
    } 
} 

Мой заголовок-компонент выглядит следующим образом:

import { Component }   from '@angular/core'; 
import { Router }    from '@angular/router'; 
import { Variables }   from '../../services/variables'; 

@Component({ 
    selector: 'app-header', 
    moduleId: module.id, 
    templateUrl: 'header.component.html' 
}) 


export class HeaderComponent { 

    constructor(private variables: Variables) {} 
    isLoggedIn() { 
     return this.variables.getIsLoggedIn(); 
    } 
    console.log(loggedIn); 
} 

И последнее, но не в последнюю очередь, в header.component.html я сделал это:

<nav class="navbar navbar-default navbar-static-top" *ngIf="isLoggedIn()"> 

Моя проблема заключается в том, что компонент header не автоматически обновляет var loggedIn, поэтому заголовок скрыт, если я вошел в систему.

Как я могу сделать его работоспособным?

+6

http://stackoverflow.com/questions/34572005/persisting-and -accessing-values-globally-in-multiple-components-in-angular-2 – Sefa

+0

спасибо за комментарий, но если я его реализую, я получаю аннотацию «Нет директивы, найденную на переменных» ... Знаете ли вы какую-либо помощь? ? – Junias

+0

Почтовый код, как вы реализовали свой глобальный сервис. – Sefa

ответ

0

Я обновил свое оригинальное сообщение, так что он функционирует сейчас;) Спасибо за вашу помощь!

Решение: Don't привязать его непосредственно к переменной, но функции и в «ngIf» просто спросить функцию;)

+0

'return this.variables.getIsLoggedIn();' создает несвязанную копию, и поэтому изменения в оригинале не отражаются. При вашем подходе вы не создаете копию, а привязываетесь к оригиналу, и поэтому обнаружение изменений Angular2 обнаруживает изменения и обновляет представление. –

+0

ОК, спасибо! – Junias

+0

Существует разница в том, как передаются значения. Примитивы типа string, num, boolean передаются как копия, объекты передаются как ссылка. Когда ссылка передается, и получатель изменяет свойства, то эти изменения также видны в оригинале (они ссылаются на один и тот же экземпляр объекта), это не относится к примитивам, потому что ссылок нет, только сами значения , –

Смежные вопросы