2017-01-16 5 views
1

Моя цель - передать строковые аргументы компоненту. Пример. У меня есть компонент, который содержит и показывает заголовок и субтитры. Я хочу передать эти строки, когда устанавливаю селектор. Что-то вроде:Угловой 2 Передача аргумента строки компоненту

@Component({ 
    selector: 'title-subtitle', 
}) 

в HTML:

<title-subtitle title="My title" subtitle="My subtitle"></title-subtitle> 
+2

проверить это живой plnk. это может помочь вам http://plnkr.co/edit/LEtEN9?p=preview –

+1

Это точно мой ответ tho: p. Чтобы быть конкретным, вы не можете просто передать строковый аргумент, как хотите. Вы можете использовать связь «От родителя к ребенку» от Angular2, которая использует «@ Input», где вы можете отправить «Объект» с его свойствами. –

ответ

3

Родитель компонент:

<title-subtitle [childInput]="parentInput"> 
</title-subtitle> 

private parentInput: any; 

ngOnInit() { 
    this.parentInput = 'Hello World'; 
} 

Детский компонент:

import { Component, Input, OnChanges, OnInit } from '@angular/core'; 

export class ChildComponent implements OnChanges, OnInit { 
    @Input() private childInput: any; 

    ngOnInit() { 
    // When the data is passed instantly, you can access it here. 
    // You can also use {{childInput}} in your HTML 
    console.log(this.childInput); 
    } 

    ngOnChanges(changes) { 
    // When the data is async : get the changes when they are ready 

    // Get @Input data when it's ready 
    if (changes.childInput) {  
     console.log(changes.childInput.currentValue); 
    } 
    } 
} 

Обратите внимание на именование свойств в родительском HTML.

N.B: Вам нужны только события OnInit и/или OnChanges, когда вам действительно нужно что-то делать с вашими данными (т. Е. Глубокое клонирование, ...). Если вы только отображаете его в своем HTML с интерполяцией, нет необходимости в событиях.

NB 2: Имейте в виде, что это ЖЕ ПРЕДМЕТ (тот же ссылка), который посылается ваш ребенок, что означает, что при обновлении свойства вашего объекта в вашем ChildComponent, изменения будут также влиять на родителях , Обычно вы клонируете свой объект, чтобы избежать такого поведения в событиях OnInit или OnChanges.

0

Если рассмотреть этот пример Hero он должен ответить на ваш вопрос

Обратите внимание на

<my-hero-detail [hero]="selectedHero"></my-hero-detail> 

на app.component.ts файл

+0

Попробуйте прочитать вопрос, прежде чем давать ответы – TeodorKolev

2

Чтобы передать строку с помощью @input от родительского компонента до дочернего компонента есть два пути.

Если вы хотите передать строку,

<child-component childInput="child input"> </child-component> 

Если вы хотите передать переменную из родительского компонента дочернего компонента,

<child-component [childInput]="parentInput"> </child-component> 
Смежные вопросы