我尝试使用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函数?
答案 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);
}