Angular Material - 多个$ mdDialog窗口的嵌套控制器 - 无法正常工作

时间:2016-05-11 13:28:28

标签: angularjs controller nested angular-material

我不知道我是不是在这里犯了一个愚蠢的错误(为此我提前道歉)。或者就AngularJS逻辑而言,我缺少一些东西。所以,我有一个自定义的$ mdDialog,它是通过按下按钮触发的。从这个$ mdDialog,我需要打开2个不同的$ mdDialog窗口,具体取决于用户的选择。这可以很好地保持控制器嵌套在同一个父控制器中(因为我使用$ mdDialog,我有很多控制器)。

一旦我想拆分这些控制器以实现代码可管理性,我就无法将它们注入到父控制器中,并且AngularJS正在给我一个 Unknown Provider 错误。 这是我的索引文件,其中包含指向主模块和控制器的链接:

BufferedImage.TYPE_INT_ARGB

Angular模块:

<script src="js/app.js"></script>
<script src="js/controllers/AppController.js"></script>
<script src="js/controllers/DatePickController.js"></script>

“父控制器”(触发第一个$ mdDialog窗口):

angular.module('demoApp', ['ngMaterial']);

和“孩子”控制器: 角     .module( 'demoApp')     .controller('DatePickController',['$ scope','$ mdDialog',函数($ scope,$ mdDialog){         $ scope.cancel = function(){$ mdDialog.cancel();}         $ scope.months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov', '月'];

angular
    .module('demoApp')
    .controller('AppController', ['$scope', '$mdDialog', 'DatePickController', 
    function($scope, $mdDialog, DatePickController){
        $scope.showConfirm = function(event) {
                  $mdDialog.show({
                         targetEvent: event,
                         templateUrl: 'templates/mainDialogTemplate.html',
                         controller: function($scope, $mdDialog, employee){
                         $scope.employee = employee;
                         $scope.closeDialog = function(){$mdDialog.hide();}
                         $scope.pickDate = function(){$mdDialog.show({
                                templateUrl:'templates/calendarDialogTemplate.html',
                                parent: angular.element(document.body),
                                clickOutsideToClose: true,
                                controller: 'DatePickController'
            })
         }
      },
        locals: {employee: $scope.userName}
     })
   };
}])

那有什么不对?

1 个答案:

答案 0 :(得分:0)

您不需要注入控制器。使用angular.controller('name', function() {...})声明它们时,请指定名称。现在,您只需使用该名称来判断对话框正在使用哪个控制器。

您已使用对话框控制器'DatePickController'的名称。您的DatePickController函数参数未被使用,只需将其删除即可。注意区别,一个是字符串,另一个是参数名称。