Детский компонент имеет два входных свойства, связанных с данными, один из типов string
(inputVariable
) и другого типа string[]
(inputArray
).Взаимодействие между компонентами в Угловом 2
import {Component, Inject, Input} from 'angular2/core';
@Component(
{
selector: 'child-app',
template: `
{{inputVariable}}
<input type="button" (click)="onButtonOneClick()" value="changeFoo">
<ul>
<li *ngFor="#el of inputArray"> {{el}} </li>
</ul>
<input type="button" (click)="onButtonTwoClick()" value="ChangeLi">
`
})
export class ChildAppComponent {
@Input() inputVariable: string;
@Input() inputArray: string[];
onButtonOneClick() {
this.inputVariable = 'new string';
}
onButtonTwoClick() {
this.inputArray[0] = 'New element String';
}
}
Родитель компонент имеет то же свойство и инициализирует дочерние компоненты, соответствующие свойства внутри шаблона ([inputArray]="inputArray" inputVariable="inputVariable"
) щелчки
import {Component} from 'angular2/core';
import {ChildAppComponent} from './childApp.component';
@Component({
selector: 'my-app',
template:
`
{{inputVariable}}
<input type="button" (click)="onButtonOneClick()" value="changeFoo">
<ul>
<li *ngFor="#el of inputArray"> {{el}} </li>
</ul>
<input type="button" (click)="onButtonTwoClick()" value="ChangeLi">
<hr>
<child-app [inputArray]="inputArray" inputVariable="inputVariable"> </child-app>
`,
directives: [ChildAppComponent]
})
export class AppComponent {
inputVariable: string = 'foo';
inputArray: string[] = ['one', 'two'];
onButtonOneClick() {
this.inputVariable = 'new string';
}
onButtonTwoClick() {
this.inputArray[0] = 'New element String';
}
}
Кнопки внутри родительских и дочерних компонентов изменяют значения соответствующего имущества (buttonOne
->inputVariable
& buttonTwo
- >inputArray
)
При нажатии на вторую кнопку (которая изменяетсязначение) изменениесобственности происходит как в родителе и ребенок компонента
Когда щелчок на первую кнопку (которая изменяет string
значения свойства) изменение только происходит внутри родителя или ребенка (соответствующего, к которому я нажал кнопку компоненты)
- Почему поведение различается в зависимости от типа недвижимости?
- Как установить привязку между двумя дочерними элементами и родительским компонентом
string
?
У меня есть сомнения, вы сказали, Контекстное связывание синтаксис [(ххх)] = «ууу» работает только, если вход и выход с именем ' @Input() xxx' и '@Output() xxxChange' ... Значит, если в родительском я использую -' 'и i child - '@Output() abc: EventEmitter = new EventEmitter();' .... и где-то 'this.abc.emit (this.inputVariable);'. Как насчет этого? –
micronyks
Я не совсем понимаю, что вы подразумеваете под этим комментарием. Соглашением является то, что для привязки к выводам вы используете '(outputName) =' и для входов, которые вы используете '[inputName]', но комбинированная форма '[(xxxName)]' работает только в том случае, если имена следуют шаблону '@Input() xxxName; @Output() xxxNameChange'. Имя ввода и вывода должно быть одинаковым, за исключением того, что на выходе нужен суффикс 'Change'. –
Что я должен искать? '[(inputVariable)] =" inputVariable1 "' в 'boot.ts'? –