我正在使用一个app控制器来调用一个模型窗口,我想将数据从模型窗口传递到app控制器。我怎么能这样做?
//parent Controller
class appCtrl implements IappSettings {
public displayItems = [some array items];
public sortingItems = [some array items];
public backItems: string;
}
dopopup(event) {
this.$mdDialog.show({
controller: appCtrl,
controllerAs: '$ctrl',
template: '<displayArrayCtrl on-save="$ctrl.onSave(displayColumns)"></displayArrayCtrl>'
});
}
onSave(displayColumns) { //on button click on child controller
this.backItems = displayColumns; //Using {{$ctrl.keyItems}} in app.html page but it's giving me empty string
}
//Child Controller
class displayArrayCtrl {
saveData = function (selectedFields: any, sortSelectedFields: any) { //on button click on parent controller
this.onSave({displayColumns: this.displayColumns}); //calling parent controller event
}
}
class displayArrayOptionsOptions implements ng.IComponentOptions {
public controller: any;
public templateUrl: string;
public bindings: any;
constructor() {
this.controller = displayArrayCtrl;
this.templateUrl = 'page.html';
this.bindings = {
onSave: '&',
displayItems: '<',
sortingItems: '<'
};
}
angular.module('app')
.component('displayArrayCtrl', new displayArrayOptionsOptions());
它将我的保存事件从子控制器调用到父控制器,但是分配变量无法正常工作。
答案 0 :(得分:1)
从tabposition
窗口返回值的直接方法是使用它返回的承诺:
$mdDialog
有关更多信息,请参见
答案 1 :(得分:0)
我发现在Parent to Child
和Child to Parent
之间进行通信的方法很少,似乎是:
$broadcast:
从父母传给孩子
$emit:
从孩子转到父母。
如果您在使用不同的组件时拥有相同的控制器和不同的组件,并且控制器不会更新父级或子级范围,则上述将非常有用,结果您无法显示更新的值。
可以帮助的事情是使用我已经用于通信的控制器进行绑定。
解决方法:
弹出显示任何控制器可以使用的不同组件:
this.$mdDialog.show({
scope: this.$scope,
preserveScope: true,
bindToController: true,
template: '<somecomponentname get-back-items="$ctrl.getBackItems"></somecomponentname>'
});
而somecomponentname组件具有:
constructor() {
this.controller = someItemCtrl;
this.templateUrl = 'scripts/somefolder/someitem.html';
this.bindings = {
getBackItems: '='
};
}
我在getBackItems
组件中创建的one more controller
上定义了somecomponentname
,如:
public getSelectedFields: any;
弹出窗口上的关闭将值分配给getBackItems
,它会立即反映到parent controller
two way binding