Javascript 从子窗口访问父窗口角度范围

Javascript 从子窗口访问父窗口角度范围,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我正在尝试从子弹出窗口更新父窗口上的作用域值。但每当我尝试访问父窗口作用域时,它都返回未定义的值。因为它包含两个窗口,所以我无法为它创建小提琴。代码示例粘贴在下面 主页(Main.html) var myApp=angular.module('myApp',[]); 函数MyCtrl($scope){ $scope.name='Superhero'; } 你好,{{name}}! 子窗口(Child.html) 函数更改(){ var e=window.opener.document.ge

我正在尝试从子弹出窗口更新父窗口上的作用域值。但每当我尝试访问父窗口作用域时,它都返回未定义的值。因为它包含两个窗口,所以我无法为它创建小提琴。代码示例粘贴在下面

主页(Main.html)


var myApp=angular.module('myApp',[]);
函数MyCtrl($scope){
$scope.name='Superhero';
}
你好,{{name}}!
子窗口(Child.html)


函数更改(){
var e=window.opener.document.getElementById('ctrl');
var ae=角元素(e);
var s=ae.scope();
s、 name=“新超级英雄”;
s、 $apply();
}

在这里,每当我尝试从angular元素访问scope时,如上面的change方法中所示,它返回未定义的[ae.scope()]。但是当相同的代码移动到父窗口中的某个函数时(只是访问“ctrl”元素的方式不同),它工作正常,并且我能够更新scope变量。有人能指出这里到底出了什么问题吗?谢谢

我也有类似的需求,在使用angular.element访问示波器时遇到同样的问题。不过,我能够通过以下方式解决这个问题:

在主/父控制器中,执行以下操作:

$scope.food = 'Mac & Cheese';
window.$windowScope = $scope;
$window.open('views/anotherWindow.html', '_blank','menubar=yes,toolbar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes,personalbar=yes');
$scope.parentWindow = window.opener.$windowScope;
console.log($scope.parentWindow.food);
然后在子窗口控制器中,您可以访问$WindowsScope,如下所示:

$scope.food = 'Mac & Cheese';
window.$windowScope = $scope;
$window.open('views/anotherWindow.html', '_blank','menubar=yes,toolbar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes,personalbar=yes');
$scope.parentWindow = window.opener.$windowScope;
console.log($scope.parentWindow.food);

将数据直接放入范围的另一种方法是使用$window scope to,这是angular中跨控制器通信的首选方式。

使用开场白中的
angular
参考:

function change() {
  var s = window.opener.angular.element('#ctrl').scope();
  s.name="New Superhero";
  s.$apply();
}

由于涉及两个窗口,我不确定这是否有效,因为子窗口可能无法访问父窗口上加载的脚本\函数。为什么你们不看看像Angularstrap这样的选项,它有一个模型弹出窗口@Chandermani谢谢你们的建议。需求坚持使用弹出窗口。所以不能使用模式窗口选项。此外,子窗口将能够访问父窗口上的dom和脚本。所以我相信这里还有其他问题,如果关闭调试信息,这将不再有效。由于建议禁用生产应用程序的调试,因此此解决方案将不起作用。如何将作用域移动到子窗口中。它说范围未定义