I want to specify an Input property for my component using plain JS (not typescript).
The only documentation I can find is this (which is from the Angular2 cheat sheet):
ng.core.Input(myProperty, myComponent);
//Declares an input property that we can
//update via property binding (e.g. <my-cmp [my-property]="someExpression">).
I've tried this in my component's constructor:
.Class({
constructor: function () {
ng.core.Input(this.name, this);
}
});
However, it does not work (no errors are reported either).
What am I doing wrong?
For these cases you have inputs
and outputs
properties. Note that for the TS case the annotations are singular (Input
and Output
) and with plain JS they're plural (inputs
and 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');
}
});
With inputs
you can use the syntax [internalValue: externalValue]
, which basically would give you the possibility to do this
<another-cmp [externalValue]="someExpression"></another-cmp>
.Component({
inputs : ['internalValue: externalValue']
})
.Class({
ngOnInit : function() {
// 'internalValue' contains 'externalValue' value
console.log(this.internalValue);
}
})
And for the parent component
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;
}
});
Here's a plnkr demonstrating the case. I hope it helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With