2016-01-25 2 views
0

Из-за отсутствия документации с угловым 2 (отсюда она все еще находится в стадии бета-тестирования), я размещаю этот вопрос здесь. Я пытаюсь понять, как реализовать простой флаг, который можно установить или удалить в любом представлении.Реализация повторяющихся свойств вида

Чтобы проиллюстрировать мой вопрос, см. Фрагмент ниже. Флаг «showNav» гарантирует, что люди не будут видеть навигацию при выходе из системы.

Несколько замечаний:

  • Сниппет ниже будет работать только в первый раз, так как «ngOnInit» никогда не будет вводить заново. Добавление функции выхода из системы создаст лазейку.
  • Реализация логики внутри конструктора не принесет нам много пользы, так как этот код нужно будет скопировать на каждый дочерний компонент, если не будет удобно вызвать «супер» на родительский конструктор?
  • Я мог бы реализовать сервис, поскольку кажется, что это может быть «угловой2» способ общения между компонентами, но это кажется ужасно подробным.

Любые комментарии приветствуются!

@Component({ 
    selector: 'app', 
    template: ` 
    <nav [ngClass]="{active: showNav}"></nav> 
    <router-outlet></router-outlet> 
    ` 
}) 
@RouteConfig([ 
    {path:'/login', name: 'Login', component: LoginComponent}, 
    {path:'/dashboard', name: 'Dashboard', component: DashboardComponent} 
]) 
export class AppComponent implements OnInit { 
    public showNav:boolean = false; 

    constructor(
    private router:Router, 
    private dataService:DataService 
){} 

    ngOnInit() { 
    if (!this.dataService.getStore().token) { 
     this.router.navigate(['Login']); 
     this.showNav = false; 
    } else { 
     this.router.navigate(['Dashboard']); 
     this.showNav = true; 
    } 
    } 
+1

Вы ищете маршрутизатор жизненным циклом обратных вызовов https://angular.io/docs/js/latest/api/router/CanActivate-var.html? –

+1

Почему вы не подписываетесь на маршрутизатор и не проверяете, жив ли «токен»? –

+0

@EricMartinez отличная идея спасибо –

ответ

1

Я думаю, что вы могли бы быть после того, как идея о том, что раньше angular.value() в угловых 1.

export var ShowNav: boolean = false; 

bootstrap(MyApp, [provide(ShowNav, {useValue: ShowNav})]); 

Тогда в любом виде это можно закачать в и используется так же, как любой службы или другой вид провайдера. Такое же значение будет использоваться для всех компонентов, которые его потребляют.

export class MyComponent{ 
    constructor(showNav: ShowNav){} 

    ... 
} 
+0

Означает ли это, что мне нужно будет установить значение showNav в каждом конструкторе каждого компонента, который будет показывать навигацию (или наоборот, скрыть ее). Конечно, можно было бы использовать опцию по умолчанию, которая наиболее часто используется. Это нормально для логического значения, но что, если showNav может быть любым значением из короткого массива ['apple', 'bike', 'yard', 'ship'], кажется довольно запутанным. –

+0

Нет, значение ShowNav будет сохранено. Поэтому, если в одном компоненте вы установите значение true, затем перейдите к другому компоненту, это все равно будет истинным, пока где-нибудь в вашем коде вы не вернете его false. – SnareChops

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