2016-04-27 50 views
1

我想加载在角度js1.5中的MD对话框,当点击按钮时,我看到的是模式弹出的HTML标记但不是控制器加载的那个零件。以下是我为显示它调用的对话框Md对话框没有加载与它关联的控制器

$mdDialog.show ({ 
     template: require('../traderdialog/traderdialog.html'), 
     controller: Controller, 
     controllerAs: 'vm', 
     locals : { 
      traderId : traderId 
     }, 
     clickOutsideToClose : true 
     }); 
    } 

所以,当我做控制器MD-对话框 文件标记:控制器,它关系到不同的组件,因为我有我的目录结构。 我对traderdialog.js代码如下为

angular.module('dashboard') 
.component('traderdialog', { 
    template: require('./traderdialog.html'), 
    controller: Controller, 
    controllerAs: 'vm', 
    bindings: { 

    } 
}); 

function Controller($mdDialog) { *some code* } 

回答

0
$mdDialog.show ({ 
     template: require('../traderdialog/traderdialog.html'), 
     controller: function ControllerName($scope){ 
        $scope.data = "Controller Loaded"; 
     }, 
     locals : { 
      traderId : traderId 
     }, 
     clickOutsideToClose : true 
     }); 
    } 

OR

$mdDialog.show ({ 
      template: require('../traderdialog/traderdialog.html'), 
      controller: controllerName, 
      locals : { 
       traderId : traderId 
      }, 
      clickOutsideToClose : true 
      }); 
     } 
    function controllerName($scope){ 
         $scope.data = "Controller Loaded"; 
      } 
+0

请检查我的更新版本代码@Mohsin –

0

你应该注入从父控制器模式的范围所需的数据。当模式打开时,它有自己的范围。

$mdDialog.show ({ 
    template: require('../traderdialog/traderdialog.html'), 
    controller: 'MyCtrl', 
    locals : { 
     traderId : traderId 
    }, 
    clickOutsideToClose : true 
    }); 
} 

现在,让我们为您定义您的控制器模式traderdialog.html

angular.module('app').controller('MyCtrl',['traderId', function(traderId){ 
    console.log(traderId); 
}]); 

现在traderId会反映在你的模态。

0

有在mdDialog使用控制器两路,其中之一是使用相同的范围与家长在保留范围:

$mdDialog.show({ 
      controller: function() { 
      return self; 
      }, 
      templateUrl: 'templates/mdDialog.html', 
      parent: angular.element(document.body), 
      targetEvent: ev, 
      clickOutsideToClose: false, 
      bindToController: true, 
      scope: $scope, 
      hasBackdrop: true, 
      preserveScope: true 
     }); 

另一种是使用具有controllerAs属性,并将其初始化:

$mdDialog.show({ 
     controller: DialogController, 
     templateUrl: 'templates/mdDialog.html', 
     parent: angular.element(document.body), 
     targetEvent: ev, 
     clickOutsideToClose: true, 
     controllerAs: 'DlgCtrl', 
     bindToController: true, 
     locals: { 
      formData: $scope.formData, 
     } 
     }) 

并且您可以使用DlgCtrl.formData语法访问您的本地人。

相关问题