首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到在巴塔朗可见的AngularJS范围来自哪里?

如何找到在巴塔朗可见的AngularJS范围来自哪里?
EN

Stack Overflow用户
提问于 2013-11-07 20:01:07
回答 1查看 992关注 0票数 2

我在巴达朗中查看我的角度应用程序,其中一个作用域有一些我不认识的值。我怎么知道是什么创造了这个范围?

我已经尝试过在DOM中搜索ng范围类。这是我想出的解决办法,如果有人感兴趣的话。该函数接受在Batarang中显示的作用域id。

代码语言:javascript
复制
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提供的信息中找到这样创建的范围的代码吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-24 14:51:40

这是我能想到的最好的了。

首先(如问题中所示)检查范围是否在dom上。指令创建的大多数作用域都是这样找到的。

在浏览器控制台中输入以下内容:

代码语言:javascript
复制
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);的东西来创建一个作用域。

在返回之前将一个断点或console.trace()放在作用域.$新函数上。在本文编写时的最新稳定版本中,AngularJS v1.2.2是第11119行。对于较早的稳定分支,AngularJS v1.0.8行7903。如果作用域id是一致的,则可以使其成为条件断点,也可以将跟踪包装在If语句中。如果您不能预测作用域id,或者只想看到所有的作用域,如果您使用的是断点或消息(如果使用的是console.trace(),如so console.trace('new scope created: ' + child.$id),则使用这些方法中的任何一种方法检查堆栈跟踪),那么您将希望通过监视来记录console.trace()的值,如果您使用断点或消息,您应该能够确定创建该范围的位置。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19845511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档