angularjs - 如何找到 Batarang 中可见的 AngularJS 范围来自何处?

标签 angularjs angularjs-scope

我正在 Batarang 中查看我的 Angular 应用程序其中一个范围有一些我不认识的值。我怎样才能找出是什么创建了该范围?

我已经尝试在 DOM 中搜索 ng-scope 类。如果有人感兴趣的话,这是我为此提出的解决方案。该函数接受 Batarang 中显示的作用域 ID。

function getElementByScopeId(scopeId) {
    var i;
    var scopesInDom = angular.element('.ng-scope');
    for (i=0; i < scopesInDom.length; i++) {
        if (angular.element(scopesInDom[i]).scope().$id === scopeId) {
            return scopesInDom[i];
        }
    }
};

这对于我在 Batarang 看到的大多数瞄准镜都适用,但找不到我正在寻找的瞄准镜。我认为这是因为它在某个时刻被从 DOM 中删除了。还有其他方法可以找到范围的来源吗?

编辑:找到了。但这只是因为我的应用程序中我不太熟悉的代码很少。它位于我包含的一个模块中,是我没有编写的少数几个模块之一。上面的函数找不到它的原因是它从来不在 DOM 上。它是使用 $rootScope.new(true) 创建的;工厂内部。所以问题仍然存在。有什么方法可以让我从 Batarang 中的可用信息中找到以这种方式创建的作用域的代码吗?

最佳答案

这是我能想到的最好的。

首先(如问题所示)检查您的范围是否在 dom 上。大多数由指令创建的作用域都可以通过这种方式找到。

在浏览器控制台中输入:

function getElementByScopeId(scopeId) {
    var i;
    var scopesInDom = angular.element('.ng-scope');
    for (i=0; i < scopesInDom.length; i++) {
        if (angular.element(scopesInDom[i]).scope().$id === scopeId) {
            return scopesInDom[i];
        }
    }
};

然后,例如,如果您要查找的作用域 ID 是 005,您可以从控制台运行 getElementByScopeId('005') ,它将返回该作用域所在的 DOM 元素创建。

如果无法通过这种方式找到作用域,或者这不足以让您识别作用域,您可以对作用域创建进行堆栈跟踪。这将要求您使用未缩小的源。可能需要这样做的一个示例是,如果服务正在使用诸如 $rootScope.new(true); 之类的内容来创建作用域。

在 Scope.$new 函数返回之前放置一个断点或 console.trace()。在撰写本文时的最新稳定版本 AngularJS v1.2.2 中,第 11119 行。对于较旧的稳定分支 AngularJS v1.0.8 第 7903 行。如果您的范围 id 一致,您可以将其设为条件断点或将跟踪包装在 if 中陈述。如果您无法预测作用域 id 或者您只想查看所有作用域,则您需要使用监视来记下 child.$id 的值(如果使用断点)或消息(如果使用) console.trace() 就像这样 console.trace('new range created: ' + child.$id) 通过使用这些方法之一检查堆栈跟踪,您应该能够确定该范围在哪里创建。

关于angularjs - 如何找到 Batarang 中可见的 AngularJS 范围来自何处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19845511/

相关文章:

javascript - 使用 "as controller"语法时,如何在子 Controller 中引用父级的范围?

angularjs - 在 Angular 中修改数组不起作用

angularjs - 我的 AngularJS 应用程序应该使用一个主模块还是多个?

javascript - AngularJS 仅调用 ng-blur 一次

javascript - 在 Angular js 中添加 header 时,HTTP GET 请求更改为 OPTIONS

javascript - 我的 Json 在使用 Ajax 发送时被切断

javascript - angularjs fullcalendar eventclick范围

javascript - 如何将变量从指令 (ngModel) 传递到指令外部的 html 中

javascript - 将函数传递给 AngularJS 指令

javascript - 仅将此元素用于多个元素中的 ng-click