某个项目,我的网页中有一个列表<ul>
元素,款式以下:
实际上它是经由过程Angular
的ng-repeat
构成的,html
中的代码是:
<li ng-repeat="for list in lists()" id="{{ list.id }}">{{ list.name }}</li>
图中下方的新建清单button
,点击以后就往lists
数组中push
了一个新的list
对象,此时页面会自动衬着,也对应增添一个<li>
,以下:
注重MyList1
一直是active
状况的(class="active"
),我的需求是新增list
后,把新增的list
设置为active
,即在新增后就变成下面这类款式:
刚开始我尝试在button
对应的函数中,往lists
数组中push
了新的list
对象后,运用document.getElementById
猎取到新增的<li>
对象,然后为其增加一个class="active"
,效果发明猎取到的DOM
对象为null
,经由搜刮发明缘由是:往lists
数组push
对象后,数组发作转变,一切的<li>
都邑从新衬着,在push
完成以后立时去找新增的DOM
对象,DOM
还没衬着好,因此是猎取不到的。解法是:运用AngularJS
的指令去监听ng-repeat
是不是衬着完成,在衬着完成后,再去取新增的<li>
对象,这个网上有许多相干的内容了,代码以下:
myapp.directive('repeatFinish', function ($timeout) {
return {
restrict: "C",
link: function (scope, element, attr) {
if(scope.$last === true){
$timeout(function () {
scope.change_list(element[0]);
}, 10);
}
}
}
});
上述代码建立了一个名为repeatFinish
的指令,restrict: "C"
示意指令放在DOM
的class
中(驼峰情势,即class="repeat-finish"
),scope.$last === true
示意已衬着到了末了一个对象,此时实行change_list
函数(定义在控制器中,功用是把当前active
的对象作废active
,然后设置传入的DOM
对象为active
),element[0]
能够直接取到当前衬着的DOM
元素。注重我运用了$timeout
,10ms
后实行change_list
,我发明直接运用change_list
照样会找不到DOM
,缘由不明,期待大神解答。