控制器外部的JS触发范围功能

时间:2015-05-24 06:13:03

标签: jquery angularjs colorbox

我已经在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之前的键。

1 个答案:

答案 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; 
    });
}