如何在AngularMaterials mdDialog中使用我的Angular应用程序中定义的现有控制器?

时间:2017-03-03 16:36:49

标签: angularjs angular-material

所以我的问题是这个,我已将控制器定义为

$mdDialog

现在我想在Test2Ctrl内添加controller:,问题是 - 我想传递给它FunctionCtrl - 我已经在上面定义的实际控制器(test1 / test2 / Settings)等等。)

但似乎所有的例子 - 包括AngularMaterials,都在创建一些名为controller: 'SettingsCtrl',的子函数 - 并使用它 - 作为控制器?!

如果我使用的话会发生什么:controller: 'DialogCtrl', - 它会抛出一个AngularJS错误,Angular被多次加载......我在对话框内看到整个网站都很小:)

这是我看到的示例 - 而不是SettingsCtrl - 我想使用angular.module('starter.controllers') .controller('testCtrl', function(){ $scope.click = function(message){ $mdDialog.show({ controller: 'DialogCtrl', templateUrl: 'dialogInfo.html', targetEvent: ev, locals : { message : message } })... } function DialogCtrl($scope, $mdDialog, message) { $scope.message = message; } ); 或至少其中的功能,我不想编写代码再次......

{{1}}

1 个答案:

答案 0 :(得分:1)

下面是一个快速演示,展示了modal对话框现有控制器的重用:

angular.module('myApp', ['ngMaterial', 'ngMessages'])
  .controller('MyController', MyController)
  .controller('ModalController', ModalController);

function MyController($scope, $mdDialog) {
  $scope.showAlert = function(ev) {
    $mdDialog.show({
      clickOutsideToClose: true,

      template: '<md-dialog>' +
        '  <md-dialog-content>' +
        '     Hi There {{message}}' +
        '  </md-dialog-content>' +
        '</md-dialog>',

      controller: 'ModalController'
    });
  };
}

function ModalController($scope) {
  $scope.message = 'You are an amazing person!';
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/angular-material/1.1.3/angular-material.min.css" rel="stylesheet" />

<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.0/angular-messages.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.0/angular-aria.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.0/angular-animate.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-material/1.1.3/angular-material.min.js"></script>


<div ng-app="myApp" ng-controller="MyController">

  <md-button class="md-primary md-raised" ng-click="showAlert($event)">
    Alert Dialog
  </md-button>

</div>

注意:关于Angular was loaded more than once可能由于各种原因。显然,无论如何,它与SettingsCtrl对话框中的modal重用无关。尝试查明该错误,大多数情况下它与错误的文件名或错误的URL或错误/错误的标记有关。