2016-01-21 71 views
8

我用我的項目中的角料。我使用了許多對話框(僅用於提醒目的),但我現在需要相當複雜的對話框。如何在「角度材質」對話框中使用相同的控制器?

這就是角料場使用的例子:

function showDialog($event) { 
    var parentEl = angular.element(document.body); 
    $mdDialog.show({ 
    parent: parentEl, 
    targetEvent: $event, 
    template: '<md-dialog aria-label="List dialog">' + 
     ' <md-dialog-content>' + 
     ' <md-list>' + 
     '  <md-list-item ng-repeat="item in items">' + 
     '  <p>Number {{item}}</p>' + 
     '  ' + 
     ' </md-list-item></md-list>' + 
     ' </md-dialog-content>' + 
     ' <md-dialog-actions>' + 
     ' <md-button ng-click="closeDialog()" class="md-primary">' + 
     '  Close Dialog' + 
     ' </md-button>' + 
     ' </md-dialog-actions>' + 
     '</md-dialog>', 
    locals: { 
     items: $scope.items 
    }, 
    controller: DialogController 
    }); 

    function DialogController($scope, $mdDialog, items) { 
    $scope.items = items; 
    $scope.closeDialog = function() { 
     $mdDialog.hide(); 
    } 
    } 
} 

取而代之的是,將有可能無法引用controller$mdDialog,並只允許它使用相同的控制器它在哪裏叫從?

例如,如果通過該按鈕調用時,對話框會簡單地使用MyCtrl控制器,這樣的對話框可以訪問變量的作用域。

<div ng-controller="MyCtrl"> 
    <md-button ng-click="showDialog($event)" class="md-raised"> 
    Custom Dialog 
    </md-button> 
</div> 

這是否可能?或者,我是否必須不斷使用locals屬性以及廣播來保持傳遞變量的來回?

+0

使用父控制器名:$ mdDialog.show({ 控制器:MyCtrl}); – Sandeep

+1

@Sandeep - 但是不會創建該控制器的新實例嗎?因此爲該對話框創建一個新的範圍? – Fizzix

回答

24

你可以做,如果你使用controllerAs。我與ES6做這樣的:

this.$mdDialog.show({ 
    targetEvent: event, 
    templateUrl: 'path/to/my/template.html', 
    controller:() => this, 
    controllerAs: 'ctrl' 
}); 

沒有ES6它看起來就像這樣:

.controller('AppCtrl', function($scope, $mdDialog, $mdMedia) { 
    var self = this; 

    this.showTabDialog = function(ev) { 
     $mdDialog.show({ 
      controller: function() { 
       return self; 
      }, 
      controllerAs: 'ctrl', 
      templateUrl: 'tabDialog.tmpl.html', 
     }); 
    }; 
}); 

我修改從文檔的基本用法例如: http://codepen.io/kuhnroyal/pen/gPvdPp

+1

非常好的方法。效果很好。 – Fizzix

+0

我不知道這個選項。非常感謝! – troig

+0

感謝= d您的幫助... +1 –

相關問題