>웹 프론트엔드 >JS 튜토리얼 >AngularJS를 사용하여 렌더링을 듣는 방법

AngularJS를 사용하여 렌더링을 듣는 방법

php中世界最好的语言
php中世界最好的语言원래의
2018-06-14 15:33:471301검색

이번에는 AngularJS를 사용하여 렌더링을 모니터링하는 방법과 AngularJS를 사용하여 렌더링을 모니터링할 때 주의 사항에 대해 설명하겠습니다. 다음은 실제 사례입니다.

사실 Angular의 ng-repeat를 통해 구성됩니다. html의 코드는 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);
      }
    }
  }
});
입니다. picture 아래의 새 목록 버튼을 클릭하면 새 list 개체를 lists 배열에 push할 수 있습니다. 자동으로 렌더링되며 그에 따라 <li>가 다음과 같이 추가됩니다.

MyList1은 항상 active 상태(class="active" code>) , 내 요구 사항은 list를 추가한 후 새 listactive로 설정하는 것입니다. 다음 스타일:


처음에는 버튼

에 해당하는 함수, 새 list 개체를 lists 배열에 push한 후 document 를 사용하세요. getElementById는 새로 추가된 <li> 객체를 얻은 다음 여기에 class="active"를 추가하고 얻은 를 발견했습니다. DOM 개체가 null입니다. 검색 후 그 이유는 다음과 같습니다. 개체를 lists 배열에 push한 후 배열이 변경되고 모든 <li>가 모두 다시 렌더링됩니다. push가 완료된 후 새로 추가된 DOM 개체를 즉시 찾으세요. DOM은 여전히 ​​잘 렌더링되지 않아 얻을 수 없습니다. 해결 방법은 AngularJS의 지침을 사용하여 ng-repeat 렌더링이 완료되었는지 모니터링하고, 렌더링이 완료된 후 새로 추가된 <li&gt를 가져오는 것입니다. ; code> 개체, 이 인터넷에는 관련 내용이 많이 있으며 코드는 다음과 같습니다. rrreee<p> 이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 주목하세요. PHP 중국어 웹사이트의 다른 관련 기사를 확인해보세요! <a href="http://www.php.cn/js-tutorial-403500.html" target="_blank" style="max-width:90%"></a>추천 자료: <br></p>🎜마우스가 텍스트 위로 지나갈 때 플로팅 레이어 효과 팝업을 만드는 JS🎜🎜🎜🎜🎜Angular 구성 요소와 상호 작용하는 방법🎜🎜🎜

위 내용은 AngularJS를 사용하여 렌더링을 듣는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.