如何从 Aurelia-dialog 中的 DI 容器注入对象
How do I inject objects from the DI container in Aurelia-dialog
使用 Aurelia,您可以将东西放入容器中,然后将其注入。容器状态未在对话框中共享。
有没有办法获取我注入到容器中的数据,并在对话框中使用它?
代码示例
home.js
fetchString(){
this.data = JSON.parse(stringform);
this.container.registerInstance('tpscform', this.data);
}
自定义-element.js
import {DialogService} from 'aurelia-dialog';
import {LookupFieldsDialog} from './dialog/lookup-fields-dialog';
@inject('tpscform', DialogService)
export class LookupFieldsQuestion {
constructor(form, dialog){
console.log(form); // returns the object from the container - works
//...
}
submit() {
this.dialogService.open({
viewModel: LookupFieldsDialog,
model: this.question,
lock: false
});
}
}
查找字段-dialog.js
import {inject} from 'aurelia-framework';
import {DialogController} from 'aurelia-dialog';
@inject(DialogController, 'tpscform')
export class LookupFieldsDialog {
constructor(controller, form) {
this.controller = controller;
console.log(form); // Returns the string 'tpscform' - doesn't work
}
activate(question) {
this.question = question;
}
}
如@FabioLuz 所述,您可以将容器传递到对话框中:
import {Container} from 'aurelia-framework';
import {DialogService} from 'aurelia-dialog';
import {LookupFieldsDialog} from './dialog/lookup-fields-dialog';
@inject(DialogService, Container)
export class LookupFieldsQuestion {
constructor(dialogService, container) {
this.container = container;
this.dialogService = dialogService;
}
submit() {
this.dialogService.open({
viewModel: LookupFieldsDialog,
model: this.question,
// Share current container here
childContainer: this.container.createChild(),
lock: false
});
}
使用 Aurelia,您可以将东西放入容器中,然后将其注入。容器状态未在对话框中共享。
有没有办法获取我注入到容器中的数据,并在对话框中使用它?
代码示例
home.js
fetchString(){
this.data = JSON.parse(stringform);
this.container.registerInstance('tpscform', this.data);
}
自定义-element.js
import {DialogService} from 'aurelia-dialog';
import {LookupFieldsDialog} from './dialog/lookup-fields-dialog';
@inject('tpscform', DialogService)
export class LookupFieldsQuestion {
constructor(form, dialog){
console.log(form); // returns the object from the container - works
//...
}
submit() {
this.dialogService.open({
viewModel: LookupFieldsDialog,
model: this.question,
lock: false
});
}
}
查找字段-dialog.js
import {inject} from 'aurelia-framework';
import {DialogController} from 'aurelia-dialog';
@inject(DialogController, 'tpscform')
export class LookupFieldsDialog {
constructor(controller, form) {
this.controller = controller;
console.log(form); // Returns the string 'tpscform' - doesn't work
}
activate(question) {
this.question = question;
}
}
如@FabioLuz 所述,您可以将容器传递到对话框中:
import {Container} from 'aurelia-framework';
import {DialogService} from 'aurelia-dialog';
import {LookupFieldsDialog} from './dialog/lookup-fields-dialog';
@inject(DialogService, Container)
export class LookupFieldsQuestion {
constructor(dialogService, container) {
this.container = container;
this.dialogService = dialogService;
}
submit() {
this.dialogService.open({
viewModel: LookupFieldsDialog,
model: this.question,
// Share current container here
childContainer: this.container.createChild(),
lock: false
});
}