首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角载荷与$digest

角载荷与$digest
EN

Stack Overflow用户
提问于 2015-07-28 16:15:33
回答 2查看 58关注 0票数 1

我试图使用angular.element获取span元素的长度,但是,我意识到加载角需要时间来执行ng-repeat。正因为如此,我没有得到正确的长度返回。

我想要完成的是:首先,根据字母的长度显示零的数字。然后随机生成一个0到9的数字。最后,用字母的正确位置替换这个数字。

HTML文件

代码语言:javascript
复制
    <span class="nbr" ng-repeat="(key, value) in letters track by $index">0</span>

JS文件

代码语言:javascript
复制
app.controller('MainCtrl', function($scope) {
   $scope.letters = ["H", "E","L", "L","O"];
   $scope.randomnbr = angular.element(document.querySelectorAll('.nbr'));
        alert($scope.randomnbr.length);
});

我做了一个柱塞柱塞连杆

如果有人能解释角度加载的方式和时间,以及为什么会发生这种情况,将是有帮助的。谢谢你先进!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-28 16:24:48

首先-不要在控制器中执行DOM操作.

之所以会发生这种情况,是因为您的控制器首先被初始化,这将触发ng重复模型作用域变量。

为了测试它,它将代码包装在一个$timeout中--这将确保您调用在下一个摘要周期中调用的angular.element。

代码语言:javascript
复制
app.controller('MainCtrl', function($scope, $timeout) {
  $scope.letters = ["H", "E", "L", "L", "O"];
  $timeout(function() {
    $scope.randomnbr = angular.element(document.querySelectorAll('.nbr'));
    alert($scope.randomnbr.length);
  });
});

更好的处理方法是当ng-重复完成时调用函数。

票数 2
EN

Stack Overflow用户

发布于 2015-07-28 16:23:40

检查工作演示:柱塞

添加$timeout以等待$digest完成:

代码语言:javascript
复制
var app = angular.module('plunker', []);

app.controller('MainCtrl', ['$scope', '$timeout', function($scope, $timeout) {
  $scope.letters = ["H", "E","L", "L","O"];

  $timeout(function () {
    $scope.randomnbr = angular.element(document.querySelectorAll('.nbr'));
    alert($scope.randomnbr.length);
  });

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

https://stackoverflow.com/questions/31681858

复制
相关文章

相似问题

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