使用解析参数注入控制器

时间:2015-12-10 10:03:11

标签: javascript angularjs angular-material

我使用角度素材(AM),我想将外部控制器传递给$ mdDialog。 在AM文档中,我们创建如下对话框:

function DialogController($scope, $mdDialog) { ... }
...
$mdDialog.show({
  controller: DialogController,
  templateUrl: 'dialog1.tmpl.html',
  parent: angular.element(document.body),
  targetEvent: ev,
  clickOutsideToClose:true
})

正如您所见,控制器只是当前控制器中调用$ mdDialog的函数。我想使用外部控制器。

myApp.controller('ElementEditCtrl', function($scope, 
$rootScope, $stateParams, $filter, $state, ElementsService, element, personnes) { ... }

正如你所看到的,我对params有一些决心。目前我正在使用$ controller服务来实例化我的控制器:

var ctrl = $scope.$new();
    $controller('ElementEditCtrl', {$scope: ctrl, personnes: EmployesService.get(), element: angular.copy($scope.element)});
    $mdDialog.show({
        controller: ctrl,
        templateUrl: 'FrontEnd/App/views/ElementEditView.html',
        parent: angular.element(document.body),
        targetEvent: ev,
        clickOutsideToClose: true,
    })

我在浏览器控制台中出现此错误:

错误:ng:areq Bad Argument 争论' fn'不是一个功能,得到了

我需要使用外部控制器,因为我需要从不同的视图打开此对话框,我不想在每个控制器中复制代码。

1 个答案:

答案 0 :(得分:1)

提供服务并公开此功能:

function createDialog($scope) {
  return function() {
    $mdDialog.show({
      scope: $scope.$new(),
      templateUrl: 'some/temmplate.html,
      clickOutsideToClose: true
    });
  };

然后只需粘贴控制器的范围即可创建对话框。

相关问题