我已经在SO上看到过对此的其他回应,但要么我不明白这些回应在我的情况下是如何起作用的,或者我是否过度思考这一点;范围一直是我的不利之处。
我目前正在使用包含iframe的模态窗口的colorbox。为了在角度中使用它,我创建了一个属性指令,它获取锚标记的URL并使用它来触发colorbox。通常,当用户在模态中执行我需要的任何操作时,我已经在父窗口中触发了JS,以避免重新加载。这似乎在Angular中更为重要,我正在试图弄清楚如何将colorbox模式与Angular进行通信。到目前为止,我能想到的最好的方法是让模态的JS改变输入(或多个输入)的值来定义我想要它做的事情。
有没有更容易/更直接的方式?
编辑:感谢下面的解决方案,我找到了答案:
var appElement = parent.document.querySelector('[ng-app=gamersplane]');
var $scope = parent.angular.element(appElement).scope();
$scope.$apply(function() {
// Do your angular stuff in here!
});
键是元素选择器上的父键和angular.element之前的键。
答案 0 :(得分:0)
我认为这个问题会有所帮助 How to change AngularJS data outside the scope?
正如您可以在http://jsfiddle.net/jeremy/kj8Rc/
中找到的小提琴中看到的那样更改功能是全局的,我的意思是不在角度范围内执行。
function change() {
// here it fetches the mandatory, and unique (?tobeconfirmed) ng-app HTML element.
var appElement = document.querySelector('[ng-app=myApp]');
// it finds the scope for you, given that previous element, i believe it s root scope in that case as ng-app.
var $scope = angular.element(appElement).scope();
// it s kind of scope binding, it will execute this function within angular scope of execution
$scope.$apply(function() {
// then finally appply his change within angular scope of execution, doing so effectively apply the changes
$scope.data.age = 20;
});
}