@webivan1

Как наследовать атрибуты в Angular2?

Есть родительский компонент {App}, в котором идёт запрос к серверу на получение информации о пользователе, авторизован он или нет, ответ записывает в {App.guest}:

import {Component} from 'angular2/core';
import {RouteConfig, Router, ROUTER_DIRECTIVES} from 'angular2/router';
import {FORM_PROVIDERS} from 'angular2/common';

import {Core} from './service/Core';

import {Home} from './home/home';
import {About} from './component/About';
import {Contacts} from './component/Contacts';

@RouteConfig([
  { 
    path: '/', 
    component: Home, 
    name: 'Index' 
  },
  {
    path: '/about',
    component: About,
    name: 'About'
  },
  {
    path: '/contacts',
    component: Contacts, 
    name: 'Contacts'
  },
  { 
    path: '/**', 
    redirectTo: ['Index'] 
  }
])

@Component({
  selector: 'app',
  providers: [ ...FORM_PROVIDERS, Core ],
  directives: [ ...ROUTER_DIRECTIVES ],
  template: require('./template/layout.html')
})

export class App {
  public guest = true;

  constructor(public serviceCore: Core) {
    // Делаем запрос и записываем ответ в this.guest
  }

  login(login) {
    return this.guest = login;
  }
}

Мы находимся на странице '/contacts' отрабатывает компонент Contacts, из него не получается получить данные родительского компонента App, конкретно свойство guest.

import {Component} from 'angular2/core';

@Component({
	selector: 'contacts',
	template: require('../template/contacts.html'),
})

export class Contacts {
	public title: string;

	constructor() {
		this.title = 'Контакты';
                // Как вызвать this.guest из App
	}
}

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

Пробовал через @Injectable(), наследует как сервис, но при изменении в родителе, дочерний элемент не перерисовывает.
  • Вопрос задан
  • 493 просмотра
Пригласить эксперта
Ответы на вопрос 2
@thebarada
нужно указывать в аттрибуте вложенного компнонента переменную
+ обявить проперти в классе с аннотацией @Input

https://egghead.io/lessons/angular-2-passing-data-...
Ответ написан
Комментировать
Xandrio
@Xandrio
Ненене, у тебя битая логика, не советую.
Создай сервис app-state(или user-state), в нем храни нужные переменные. Зачем тебе вот это вот все? Компонент app чуточку другие цели выполняет.

а так да, @Input используй.
Но опять таки, ты же не будешь из предка в предка чайлда в чайлд передавать переменную постоянно?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы