Ответ 1
В этих случаях у вас есть свойства inputs
и outputs
. Обратите внимание, что для случая TS аннотации являются сингулярными (Input
и Output
), а с простым JS они множественны (inputs
и outputs
).
var Children = ng.core.
Component({
inputs : ['myValue'], // Equivalent to @Input('myValue')
outputs : ['emitValue'] // Equivalent to @Output() emitValue;
}).
Class({
constructor: function() {
// Initialize emitValue
this.emitValue = new ng.core.EventEmitter();
},
// Available at ngOnInit lifecycle
ngOnInit : function() {
console.log(this.myValue);
},
// Value that the component will emit
emit : function() {
this.emitValue.emit('This is some value from children');
}
});
С помощью inputs
вы можете использовать синтаксис [internalValue: externalValue]
, который в основном предоставит вам возможность сделать это
<another-cmp [externalValue]="someExpression"></another-cmp>
.Component({
inputs : ['internalValue: externalValue']
})
.Class({
ngOnInit : function() {
// 'internalValue' contains 'externalValue' value
console.log(this.internalValue);
}
})
И для родительского компонента
var Parent = ng.core.
Component({
selector: 'cmp',
template : `
<another-cmp [myValue]="myValue" (emitValue)="printValue($event)">
</another-cmp>
What does my children have to say? {{childrenValue}}
`,
directives : [Children]
}).
Class({
constructor: function() {
this.myValue = 'Some value to pass to children';
},
printValue : function(value) {
this.childrenValue = value;
}
});
Здесь plnkr, демонстрирующий случай. Надеюсь, это поможет.