我有一些上传指令,这很简单,唯一的问题是我必须从这个指令组件向父组件发出值。有人知道一个简单的解决方案吗?提前致谢。这是我现在的指示:
上传-field.component.ts
import { Component, OnInit, Input } from '@angular/core';
import { TooltipModule } from 'ngx-bootstrap/tooltip';
@Component({
selector: 'app-upload-field',
templateUrl: './upload-field.component.html',
styleUrls: ['./upload-field.component.scss']
})
export class UploadFieldComponent implements OnInit {
@Input() labelName: string;
@Input() placeHolderValue: string;
value = '';
constructor() { }
ngOnInit() {
}
uploadButton(event: any) {
this.value += event.target.value;
this.value = this.value.replace(/^.*\\/, '');
}
}
上传-field.component.html
<input placeholder="{{placeHolderValue}}" disabled="disabled" class="form-control first-input" value="{{value}}" />
<div class="file-upload">
<span class="btn btn-default btn-lg">{{labelName}}</span>
<input type="file" class="form-control upload-button" (change)="uploadButton($event)" value="{{value}}" />
</div>
我这样使用它:
<app-upload-field [labelName]="'Blader'" [placeHolderValue]="'Kies bestand'"></app-upload-field>
答案 0 :(得分:5)
您可以使用EventEmitter
。
参考: Parent listens for child event
import { Component, Output, EventEmitter } from '@angular/core';
@Component({
//...your decorator properties
})
export class UploadFieldComponent {
@Output() onValueChanged = new EventEmitter<any>();
uploadButton() {
this.value += event.target.value;
this.value = this.value.replace(/^.*\\/, '');
this.onValueChanged.emit(this.value);
}
}
在父组件中, 模板:
<app-upload-field [labelName]="'Blader'" [placeHolderValue]="'Kies bestand'"
(onValueChanged)=onValueChanged($event)>
</app-upload-field>
在组件代码中,
onValueChanged(value) {
// value will be the emitted value by the child
}
子组件公开了一个
EventEmitter
属性 当事情发生时发出事件。父母绑定到该事件 财产并对这些事件作出反应。
答案 1 :(得分:0)
在 UploadFieldComponent
中export class UploadFieldComponent implements OnInit {
...
@Output myValueChanged = new EventEmitter<string>();//passing a string value to parent
...
uploadButton(event: any) {
...
myValueChanged.emit(valueToBePassed);
}
}
<强>用法强>
<app-upload-field [labelName]="'Blader'" (myValueChanged)="parentEvent($event)" [placeHolderValue]="'Kies bestand'"></app-upload-field>
在父组件中
parentEvent(data:string){
// do something with data
}
有关详细信息,请参阅this链接。