我可以为指令的不同实例更改指令的控制器吗?

时间:2014-01-10 08:07:23

标签: angularjs angularjs-directive

我创建了一个名为modalDialog的指令,它基本上是一个模态对话框。它使用 transclude ,因此我稍后可以在我的代码中执行此操作:

<div modal-dialog id="dialog" dialog-title="This is my Dialog">
    ...
    here goes the content of the dialog
</div>

我想在我的应用程序的不同位置使用此指令,并出于不同的目的。对话框的内容自然会有所不同,所以有一种方法可以将Controller传递给指令,就像我传递对话框标题或任何其他参数一样。

我想过将模态对话框包装在div中,并在其上设置控制器。像这样:

<div ng-controller="ThisInstanceController">
   <div modal-dialog id="dialog" dialog-title="This is my Dialog">
      ...
      here goes the content of the dialog
   </div>
</div>

但我不太喜欢它。有更优雅的方式吗?

1 个答案:

答案 0 :(得分:0)

看看Angular-UI模态。他们有一种非常优雅的使用模态的方式。简而言之,当模态打开时,您可以传递您想要初始化的控制器。

$scope.open = function () {

    var modalInstance = $modal.open({
            templateUrl: 'myModalContent.html',
            controller: ModalInstanceCtrl,
            resolve: {
                items: function () {
                  return $scope.items;
                }
            } 
        });

    modalInstance.result.then(function (selectedItem) {
        $scope.selected = selectedItem;
    }, function () {
        $log('Modal dismissed at: ' + new Date());
    });
};

好的部分是你可以通过控制器之间的解析传递数据。