@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了解更多详情。
我有一些上传指令,非常简单,唯一的问题是我必须从这个指令组件向父组件发出值。有人知道一个简单的解决方案吗?提前致谢。这是我现在的指令:
上传-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了解更多详情。