> 웹 프론트엔드 > JS 튜토리얼 > AngularJS를 사용하여 ng-repeat 렌더링 완료를 모니터링하는 방법

AngularJS를 사용하여 ng-repeat 렌더링 완료를 모니터링하는 방법

php中世界最好的语言
풀어 주다: 2018-05-09 11:35:40
원래의
1647명이 탐색했습니다.

이번에는 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"表示指令放在DOMclass中(驼峰形式,即class="repeat-finish"),scope.$last === true表示已经渲染到了最后一个对象,此时执行change_list函数(定义在控制器中,功能是把当前active的对象取消active,然后设置传入的DOM对象为active),element[0]可以直接取到当前渲染的DOM元素。注意我使用了$timeout10ms后执行change_list,我发现直接使用change_list还是会找不到DOM사실 Angular의 ng-repeat를 거쳐서 구성되는데, html의 코드는 다음과 같습니다.

rrreee

그림 하단에 새 목록 버튼을 만듭니다. 클릭하면 푸시됩니다. code>lists 배열이 생성됩니다. 이때 페이지가 자동으로 렌더링되고 <li>가 추가됩니다. 따라서 다음과 같습니다:

MyList1은 항상 active 상태(class="active")이고, 내 요구 사항은 list를 추가한 후 새 listactive로 설정하세요. , 즉, 추가한 후에는 다음 스타일이 됩니다:

처음에는 해당 함수에서 버튼을 사용하려고 했는데, 새 목록 개체를 에 <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&gt를 가져오는 것입니다. ; code> 개체, 이 인터넷에는 관련 콘텐츠가 많이 있으며 코드는 다음과 같습니다. <br>rrreee

위 코드는 repeatFinish, restrict: "C라는 명령을 생성합니다. "는 지시문이 DOMclass에 위치함을 의미합니다(카멜 케이스 형식, 예: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿