在ng-init和ng-repeat中获取一个元素

时间:2015-01-22 02:25:37

标签: javascript angularjs angularjs-ng-repeat

我尝试使用ng-init在特定元素加载时进行一些初始化。在我的模板中,我这样做:

<div id="timer-0" ng-init="initTimer('timer-0', timerOne);"></div>

timerOne是在控制器范围内声明的对象,如下所示:

$scope.timerOne = {...};

$scope.initTimer = function(id, timer)
{
  var element = angular.element("#"+id);
  // a bunch of other stuff with the timer and element interacting with each other
}

当我的HTML像这样硬编码时,一切正常,但当我开始尝试在ng-repeat中调用initTimer时,angular.element没有返回任何内容。

我的ng-repeat看起来像这样:

<div ng-repeat="timer in timers">
  <h1>{{timer.label}}</h1>
  <div id="timer-{{$index}}" ng-init="initTimer('timer-'+$index, timer);"></div>
</div>

我猜测在调用ng-init之后元素会被插入到DOM中。一旦我确定这些元素存在,有没有办法调用我的init函数?

1 个答案:

答案 0 :(得分:1)

只需在init函数中将index作为参数传递。

<div ng-repeat="timer in timers">
  <h1>{{timer.label}}</h1>
  <div id="{{'timer-'+$index}}" ng-init="initTimer($index, timer);"></div>
</div>

在控制器中尝试访问这样的元素:

$scope.initTimer = function(id, timer)
{
    var element = angular.element('timer-' + id);
}