当前位置: 首页 > 面试题库 >

如何计算页面上的手表总数?

丁淇
2023-03-14
问题内容

在JavaScript中,有没有一种方法可以计算整个页面上有角度的手表的数量?

我们使用Batarang,但它并不总是适合我们的需求。我们的应用程序很大,我们对使用自动化测试来检查手表计数是否增加过多感兴趣。

在每个控制器的基础上计数手表也将很有用。

编辑 :这是我的尝试。它在ng-scope类中将手表计入所有内容。

(function () {
    var elts = document.getElementsByClassName('ng-scope');
    var watches = [];
    var visited_ids = {};
    for (var i=0; i < elts.length; i++) {
       var scope = angular.element(elts[i]).scope();
       if (scope.$id in visited_ids) 
         continue;
       visited_ids[scope.$id] = true;
       watches.push.apply(watches, scope.$$watchers);
    }
    return watches.length;
})();

问题答案:

(您可能需要更改bodyhtml或放置在任何位置ng-app

(function () { 
    var root = angular.element(document.getElementsByTagName('body'));

    var watchers = [];

    var f = function (element) {
        angular.forEach(['$scope', '$isolateScope'], function (scopeProperty) { 
            if (element.data() && element.data().hasOwnProperty(scopeProperty)) {
                angular.forEach(element.data()[scopeProperty].$$watchers, function (watcher) {
                    watchers.push(watcher);
                });
            }
        });

        angular.forEach(element.children(), function (childElement) {
            f(angular.element(childElement));
        });
    };

    f(root);

    // Remove duplicate watchers
    var watchersWithoutDuplicates = [];
    angular.forEach(watchers, function(item) {
        if(watchersWithoutDuplicates.indexOf(item) < 0) {
             watchersWithoutDuplicates.push(item);
        }
    });

    console.log(watchersWithoutDuplicates.length);
})();
  • 感谢erilem指出此答案缺少$isolateScope搜索,并且观察者可能在他/她的答案/评论中重复。

  • 感谢Ben2307指出'body'可能需要更改。

原版的

除了检查HTML元素的data属性而不是其类之外,我执行了相同的操作。我在这里跑了你的:

http://fluid.ie/

拿到了83。我跑了我,拿到了121。

(function () { 
    var root = $(document.getElementsByTagName('body'));
    var watchers = [];

    var f = function (element) {
        if (element.data().hasOwnProperty('$scope')) {
            angular.forEach(element.data().$scope.$$watchers, function (watcher) {
                watchers.push(watcher);
            });
        }

        angular.forEach(element.children(), function (childElement) {
            f($(childElement));
        });
    };

    f(root);

    console.log(watchers.length);
})();

我也把这个放在我的:

for (var i = 0; i < watchers.length; i++) {
    for (var j = 0; j < watchers.length; j++) {
        if (i !== j && watchers[i] === watchers[j]) {
            console.log('here');
        }
    }
}

而且没有打印出来,所以我猜我的更好(因为它找到了更多的手表)-但是我缺乏深入的角度知识来确定我的不是解决方案集的适当子集。



 类似资料:
  • 本文向大家介绍如何计算硒页面中的帧数?,包括了如何计算硒页面中的帧数?的使用技巧和注意事项,需要的朋友参考一下 我们可以通过下面列出的方法计算硒中的帧数- 借助具有标签名frame / iframe的List <WebElement>。 借助Javascript执行器。 示例 带标记名。 示例 使用Javascript执行器。

  • 我想知道如何计算的累计总和在AnyLogic中。具体地说,我有一个循环事件,每周改变一个参数的值。从这个参数我想计算它收到的值的累计总和,我怎么做呢? 该事件是循环模式的超时。操作是: "name_parameter"=圆形(max(正常(10,200),0));

  • 问题内容: 我有这些表: 我如何计算这些列的总价: 对于每种产品: 适用于所有含运费的产品 问题答案: 您可以通过访问属性来检索 _数据透视_表的列,该属性已经存在了很长时间了 默认情况下,只有模型关键点会出现在枢轴对象上。如果数据透视表包含额外的属性,则在定义关系时必须指定它们: 在您的情况下,您可以像下面的代码中那样定义关系: 现在,可以通过属性(例如)访问表上的列。 最后,这是计算订单总数的

  • 问题内容: 标题基本上说明了一切。我需要使用Python计算地球表面上的多边形内部的面积。计算地球表面上任意多边形所围成的面积虽然可以说明这一点,但在技术细节上仍然含糊不清: 如果要使用更“ GIS”的样式来执行此操作,则需要为您的区域选择一个度量单位,并找到保留该区域的适当投影(并非全部如此)。由于您正在谈论计算任意多边形,因此我将使用类似Lambert Azimuthal等面积投影的方法。将投

  • 问题内容: 如何使用iText在每个页面上添加总页数? 问题答案: 使用伪页面计数将输出从a 处理为第一个。 从中创建一个,调用以获取实际的页数。 重新创建PDF输出,知道页数是多少,并相应地更改页脚。 这很麻烦,但是如果没有两遍方法,就没有简单的方法来知道页数。有关处理PDF的详细信息,请参见示例代码。