2016-06-13 147 views
0

我正在使用一個應用程序控制器來調用一個模型窗口,並且想要將數據從模型窗口傳遞到應用程序控制器。我怎樣才能做到這一點?將數據從子組件傳遞到父組件

//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

我已經找到一些方法Parent to ChildChild 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: '=' 
    }; 
} 

我已經getBackItemsone more controller內創建定義somecomponentname組件例如:

public getSelectedFields: any; 
上彈出接近分配值 getBackItems,它會立即反映到 parent controller,因爲它是 two way binding

相關問題