Javascript angularjs模态将数据传输到外部控制器的正确方法?

Javascript angularjs模态将数据传输到外部控制器的正确方法?,javascript,angularjs,angularjs-scope,ionic-framework,angularjs-model,Javascript,Angularjs,Angularjs Scope,Ionic Framework,Angularjs Model,我想知道关于angularjs模型的软件设计和最佳实践的正确方法是什么。 在我的应用程序中,我有一个主窗口,它使用自己的控制器,在那里我有一个用于模态的show()、hide()和destroy函数。 主窗口上的一个按钮将显示()模式,在那里我将有一个隔离作用域,其中包含从父作用域继承的变量,以及它自己的控制器。 我希望能够将一个对象传递给对话框,以便对其执行“修改”操作,以及一个“创建”按钮,该按钮关闭模态并创建一个新的模态中输入数据的对象 我面临两个问题: 1.无法从主控制器中的作用域和模态

我想知道关于angularjs模型的软件设计和最佳实践的正确方法是什么。 在我的应用程序中,我有一个主窗口,它使用自己的控制器,在那里我有一个用于模态的show()、hide()和destroy函数。 主窗口上的一个按钮将显示()模式,在那里我将有一个隔离作用域,其中包含从父作用域继承的变量,以及它自己的控制器。 我希望能够将一个对象传递给对话框,以便对其执行“修改”操作,以及一个“创建”按钮,该按钮关闭模态并创建一个新的模态中输入数据的对象

我面临两个问题: 1.无法从主控制器中的作用域和模态控制器中的作用域传输对象,除非有一个带有预定义对象的控制器,然后我可以向其添加数据(但为什么它可以工作?) 2.与show()、hide()不一致:show()必须驻留在主控制器中,但由于modal有自己的控制器,因此它必须实现hide()&destroy(),这在代码责任方面让我感觉非常糟糕


在这种情况下,什么是好的做法?

不确定这些是否是最佳做法,但它们很有效

1:

在我的控制器中:

$scope.modelData = {};  // This will be loaded from an ajax call or set somehow
$scope.dialogFuncs = {};
在我的对话框指令范围中:

scope: {
    ngModel: "="
}
在我的html中:

<dialog-directive ng-model='modelData'></dialog-directive>
指令:

scope: {
    ngModel: "=",
    dialogFuncs: "="
},
controller: ['$scope', function($scope) {
    $scope.dialogFuncs.openDialog = function() {
        // code to open the dialog here
    }

    $scope.dialogFuncs.closeDialog = function() {
        // close dialog code here
    }
}]
Html:


....
打开对话框

希望这有帮助。

您可以使用的$modal服务或编写自己的服务,将modal作为指令编写,并在控制器内使用该服务的打开和关闭方法

e、 g


将模态作为指令编写。将模式作为服务写入,或者使用angular bootstrap的
$modal
,如果您想将数据传递给您的模式,您可以将其作为attr传递。在控制器中注入服务,并使用服务的打开、关闭等。查看ngDialog,了解您正在尝试执行的操作的良好实现。。。
<dialog-directive ng-model='modelData' dialog-funcs='dialogFuncs'></dialog-directive>
....
<button ng-click='dialogFuncs.openDialog()'>Open Dialog</button>
 $modal.open({
     template: '<my-modal something="cool"></my-modal>'
 })
  restrict: 'E'
  replace: false
  templateUrl: 'yourhtml.html'
  link: ($scope, $element, attrs) ->
      if attrs.something is cool
        console.log('cool')
      else
        $scope.$close()