@Output 从指令向父组件发出值 Angular 4

@Output emit value from directive to parent component Angular 4

我有一些上传指令,非常简单,唯一的问题是我必须从这个指令组件向父组件发出值。有人知道一个简单的解决方案吗?提前致谢。这是我现在的指令:

上传-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>

您可以为此使用 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
 }

The child component exposes an EventEmitter property with which it emits events when something happens. The parent binds to that event property and reacts to those events.

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 link了解更多详情。