2016-01-21 51 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 –

相关问题