이번에는 NG-Repeat 렌더링 완료를 모니터링하기 위해 AngularJS를 사용하는 방법을 보여 드리겠습니다. 살펴보자. 특정 프로젝트에서 내 웹페이지에 다음 스타일의 목록 <ul>
요소가 있습니다:
<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
对象后,使用<a href="http://www.php.cn/code/658.html" target="_blank">document</a>.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
사실 Angular
의 ng-repeat
를 거쳐서 구성되는데, html의 코드는 다음과 같습니다.
그림 하단에 새 목록 버튼
을 만듭니다. 클릭하면 푸시
됩니다. code>lists 배열이 생성됩니다. 이때 페이지가 자동으로 렌더링되고 <li>
가 추가됩니다. 따라서 다음과 같습니다:
MyList1
은 항상 active
상태(class="active"
)이고, 내 요구 사항은 list
를 추가한 후 새 list
를 active
로 설정하세요. , 즉, 추가한 후에는 다음 스타일이 됩니다:
처음에는 해당 함수에서 버튼
을 사용하려고 했는데, 새 목록
개체를 에 <code>push
한 후 목록 배열, <a href="http://www.php.cn/code/658.html" target="_blank">document</a><a href="http://www.php.cn/js-tutorial-395764.html" target="_blank">.getElementById</a>
를 사용하면 새로 추가된 항목을 가져옵니다. <li>
객체에 class="active"
를 추가하면 획득한 DOM
객체는 null, 검색 이후 이유는 다음과 같습니다: 목록 이후
배열 push
개체, 배열이 변경됩니다. 모든 <li>
는 push
가 완료된 후 즉시 다시 렌더링됩니다. 새로 추가된 DOM
객체를 찾으세요. DOM
code>는 아직 렌더링되지 않았으므로 얻을 수 없습니다. 해결 방법은 AngularJS
의 지침을 사용하여 ng-repeat
렌더링이 완료되었는지 모니터링하고, 렌더링이 완료된 후 새로 추가된 <li>를 가져오는 것입니다. ; code> 개체, 이 인터넷에는 관련 콘텐츠가 많이 있으며 코드는 다음과 같습니다. <br>rrreee
repeatFinish
, restrict: "C라는 명령을 생성합니다. "
는 지시문이 DOM
의 class
에 위치함을 의미합니다(카멜 케이스 형식, 예: class="repeat-finish"
). , scope.$last = == true
는 마지막 개체가 렌더링되었으며 이때 change_list
함수가 실행됨을 의미합니다( 컨트롤러🎜에서 현재 활성
개체 활성
을 취소하는 기능입니다. , 그리고 들어오는 DOM
객체를 active
로 설정하면 element[0]
가 현재 렌더링된 DOM
를 직접 가져올 수 있습니다. > 요소. $timeout
을 사용하고 10ms
이후에 change_list
를 실행했는데, DOM
을 직접 사용했는데 이유는 알 수 없습니다. 누군가 답변해 주셨으면 좋겠습니다. 🎜🎜이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요! 🎜🎜추천 자료: 🎜🎜🎜selectpicker 드롭다운 상자 사용 사례 분석🎜🎜🎜🎜🎜Vue가 동적 새로 고침 Echarts 구성 요소를 사용하는 방법🎜🎜🎜위 내용은 AngularJS를 사용하여 ng-repeat 렌더링 완료를 모니터링하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!