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