私はモーダルメールを送信していますが、実際にはhttp.post
リクエストに問題があります。問題は、子コンポーネントでpost()
が実行されていることです。つまり、関数が実際に実行されるときにはthis.postUrl
は未定義です。子コンポーネントがthis.postUrl
にアクセスできるようにするには、どうすれば入力として渡すことができますか?なぜ私が入力と一緒にそれを渡したくないのかという理由は、子コンポーネントも他の場所でも使用されるため、postUrl
は入力として使用するにはあまりにも特殊です。このシナリオでのみ使用されるためです。入力経由で子コンポーネントから親コンポーネントの値にアクセスする方法
@Component({
selector: 'modal-email',
templateUrl: './app/assets/scripts/modules/modal/templates/modal-email/modal-email.component.html',
styleUrls: ['./app/assets/scripts/modules/modal/templates/modal-email/modal-email.component.css'],
inputs: [
'model',
'postUrl',
'header',
'text'
],
directives: [FormInputWithButtonComponent],
providers: [Http, HTTP_PROVIDERS]
})
export class ModalEmailComponent {
constructor(private _http: Http) {
}
post() {
// this.postUrl becomes undefined, this.model is defined since it also lives in the child component
console.log(this.postUrl, this.model);
this._http.post(this.postUrl, {email: this.model})
.map(res => res.json())
.subscribe(
data => this.data = data,
err => console.log(err)
)
}
}
ModalEmailComponent
は次のように使用されている:
<form-input-with-button [(model)]="email" type="email" [onSubmit]="post"></form-input-with-button>
子コンポーネント:
@Component({
selector: 'form-input-with-button',
templateUrl: './app/assets/scripts/modules/form-controls/form-input-with-button/form-input-with-button.component.html',
styleUrls: ['./app/assets/scripts/modules/form-controls/form-input-with-button/form-input-with-button.component.css'],
inputs: [
'model',
'onSubmit' // onSubmit is what calls the post function from ModalEmailComponent
],
host: {
'(input)': 'modelChange.emit($event.target.value)'
}
})
export class FormInputWithButtonComponent {
@Input() model: string;
@Output() modelChange: EventEmitter = new EventEmitter();
}
modal-email
インサイド
<modal-email postUrl="localhost:3000/email"></modal-email>
はform-input-with-button>
コンポーネントをあります
FormInputWithButtonComponent
テンプレート:
<input [(ngModel)]="model" class="form-input-with-button">
<button (click)="onSubmit()" class="form-input-button">Submit</button>
EDIT:はあなたがコンポーネントを拡張することはできますか?ような何か:私はそれが私はこれが不可能であることを考えさせるCannot read property prototype of undefined
を言ってみました
export class FormInputWithButtonComponent extends ModalEmailComponent
。
を私は継承が(私が間違っている可能性があります)まだサポートされていないと思います。 – micronyks