我如何找到在巴塔朗可见的AngularJS示波器的来源?

我如何找到在巴塔朗可见的AngularJS示波器的来源?,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我在中查看我的angular应用程序,其中一个示波器有一些我无法识别的值。我如何找出是什么创建了这个范围 我已经尝试在DOM中搜索类ng范围。如果有人对此感兴趣,下面是我提出的解决方案。该函数接受在Batarang中显示的范围id function getElementByScopeId(scopeId) { var i; var scopesInDom = angular.element('.ng-scope'); for (i=0; i < scopesInDo

我在中查看我的angular应用程序,其中一个示波器有一些我无法识别的值。我如何找出是什么创建了这个范围

我已经尝试在DOM中搜索类ng范围。如果有人对此感兴趣,下面是我提出的解决方案。该函数接受在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];
        }
    }
};
函数getElementByScopeId(scopeId){ var i; var scopesInDom=angular.element('.ng scope'); 对于(i=0;i 这适用于我在巴塔朗看到的大多数示波器,但找不到我要找的。我想这是因为它在某个时候被从DOM中删除了。有没有其他方法可以找到作用域的源


编辑:找到了它。但这只是因为我的应用程序中几乎没有我不熟悉的代码。这是在我的一个模块中,我没有写的几篇文章之一。上面的函数找不到它的原因是因为它从来都不在DOM上。它是使用$rootScope.new(true)创建的;在工厂里。因此,问题依然存在。有什么方法可以让我从巴塔朗的可用信息中找到以这种方式创建的作用域的代码吗?

这是我能提供的最好的方法

首先(如问题所示)检查您的范围是否在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];
        }
    }
};
函数getElementByScopeId(scopeId){ var i; var scopesInDom=angular.element('.ng scope'); 对于(i=0;i 然后,例如,如果您要查找的范围id是005,则可以从控制台运行
getElementByScopeId('005')
,它将返回创建范围的DOM元素

如果无法通过这种方式找到范围,或者这不足以识别范围,则可以在创建范围时进行堆栈跟踪。这将要求您使用未统一的源。可能需要这样做的一个例子是,如果服务正在使用类似
$rootScope.new(true)的内容创建作用域以创建作用域


在作用域上放置断点或console.trace()。$new函数返回之前。在撰写本文时最新的稳定版本AngularJSV1.2.2中,第11119行。对于较旧的稳定分支AngularJS v1.0.8行7903。如果您的作用域id是一致的,则可以将其设为条件断点或将跟踪包装在If语句中。如果无法预测作用域id,或者只想查看所有作用域,则需要注意
child.$id
的值,如果使用断点,则使用手表;如果使用console.trace(),则使用消息,如
console.trace('创建的新作用域:'+child.$id)
通过使用以下任一方法检查堆栈跟踪,您应该能够确定在何处创建该范围。

范围。$id是AngularJS的内部属性,通常不应使用。你能解释一下你需要访问这些id的原因吗?与其说我需要id,还不如说我需要id。巴塔朗正好显示了id,这是我唯一需要识别这个范围的信息。我真的只是想知道这个作用域是从哪里来的,因为它有我不认识的属性。我编辑了这个问题,以使意图更加清晰,而不太关注作用域id.grep | search | find | Ctrl+F | Ctrl+B“$scope.propertyIDoNotRecognize=,在所有文件中?是的,我试过了。找不到。可能是正在使用的别名,或者它位于某个指令中(因此作用域未命名为$scope)。谢谢你的建议。