Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从$dialog控制器向任何其他控制器获取信息?_Javascript_Angularjs_Angular Ui - Fatal编程技术网

Javascript 如何从$dialog控制器向任何其他控制器获取信息?

Javascript 如何从$dialog控制器向任何其他控制器获取信息?,javascript,angularjs,angular-ui,Javascript,Angularjs,Angular Ui,我正在打开可以最小化、带回、随时编辑并最终提交的对话框。我想做的可能不仅仅是一个对话,但我希望它能成功 现在我有了它,这样我就可以调用我的对话框,用现有数据预先填充它,编辑并提交。我现在的主要问题是,我不知道如何将最终的、可能经过编辑的数据发送到客户端的另一个控制器 $scope.$broadcast或$scope.$emit似乎不起作用。。注入的控制器以某种方式位于其他控制器之外 以下是我创建对话框的方式: $scope.openDialog = function(index){ va

我正在打开可以最小化、带回、随时编辑并最终提交的对话框。我想做的可能不仅仅是一个对话,但我希望它能成功

现在我有了它,这样我就可以调用我的对话框,用现有数据预先填充它,编辑并提交。我现在的主要问题是,我不知道如何将最终的、可能经过编辑的数据发送到客户端的另一个控制器

$scope.$broadcast或$scope.$emit似乎不起作用。。注入的控制器以某种方式位于其他控制器之外

以下是我创建对话框的方式:

$scope.openDialog = function(index){
    var html = $scope.buildHTML(index);

    var opts = {
        resizeable: true,
        backdrop: false,
        handle: ".modal-header",
        template: html,
        controller: 'OpenItemCtrl',
        resolve: {
            itemModel: function() {              
                return $scope.item[index];
            }
        }
    };

    var d = $dialog.dialog(opts);
    d.open().then(function() {
        // Right here I can determine that a dialog has closed.
        alert(index);
    });
};
这是我的控制器:

function OpenItemCtrl($scope, dialog, itemModel) {
    $scope.item= {};

    for(key in itemModel) {
        $scope.item[key] = itemModel[key];
    }

    $scope.close = function(qty, src, price){
        // I need to get these edited variables back 
        // into my controller classes somehow...
        $scope.$emit("ItemFinalized", {msg:$scope.item});
        $scope.$broadcast("ItemFinalized", {msg:$scope.item});
        dialog.close();
    };
}

如何将最终数据返回到控制器层次结构中,以便根据需要传递它们

Long和short,您调用dialog services dialog方法,它返回一个承诺,当该承诺得到解决时,将调用一个函数,并将传递给对话框控制器中的dialog close调用的数据


你是否在使用ui.bootstrap,如果是这样的话,他们有一个对话框的例子,该对话框在关闭时使用返回数据的承诺。同样,这个问题在AS3中也会发生,它的弹出窗口管理器和标题窗口类等。我想当你尝试使用emit/broadcast时,可能会遇到与AS3类似的问题,因为弹出窗口并且模态有一个父对象,它不在显示对象的正常层次结构中(我确信在本例中模态是DOM的一部分,但可能位于其他控制器的同级位置)。谢谢,它半瞪着我的脸,但我没有看到:P我可以通过promise将我要发射/广播的JSON交回,所以我也有了:)现在我需要弄清楚的是如何使它们可拖动,我准备好了!没问题,只要我能回答一个有棱角的问题,并且碰巧正在使用对话框:)
$scope.opts = {
    backdrop: true,
    keyboard: true,
    backdropClick: true,
    template:  t, // OR: templateUrl: 'path/to/view.html',
    controller: 'TestDialogController'
  };

$scope.openDialog = function(){
    var d = $dialog.dialog($scope.opts);
    d.open().then(function(result){
      if(result)
      {
        alert('dialog closed with result: ' + result);
      }
    });
  };


// the dialog is injected in the specified controller
function TestDialogController($scope, dialog){
  $scope.close = function(result){
    dialog.close(result);
  };
}