복붙노트

[JQUERY] 반복 이벤트 마감

JQUERY

반복 이벤트 마감

해결법


  1. 1.사실, 당신은 지시어를 사용해야하고, 거기에 NG-반복 루프의 끝 부분에 묶여 더 이벤트입니다 (각 요소는 개별적으로 구축 될 때, 그리고 그 자체가 이벤트있다). 그러나) 사용 지침은 당신이 만드는 데 사용할 수있는 몇 ngRepeat의 특정 속성이있다) 당신이 필요로하는 모든와 b를 수 있습니다 이벤트 "ngRepeat에 완료".

    사실, 당신은 지시어를 사용해야하고, 거기에 NG-반복 루프의 끝 부분에 묶여 더 이벤트입니다 (각 요소는 개별적으로 구축 될 때, 그리고 그 자체가 이벤트있다). 그러나) 사용 지침은 당신이 만드는 데 사용할 수있는 몇 ngRepeat의 특정 속성이있다) 당신이 필요로하는 모든와 b를 수 있습니다 이벤트 "ngRepeat에 완료".

    당신이 원하는 모든 테이블의 전체에 대한 스타일 / 추가 이벤트의 경우 특히, 모든 ngRepeat 요소를 포괄하는 지시어에 사용하여 수행 할 수 있습니다. 특별히 각 요소를 해결하려는 경우 반면에, 당신은 ngRepeat 내에서 지시어를 사용할 수 있으며,이 생성 된 후에는, 각 요소에 대해 역할을합니다.

    그런 다음, $ 지수는, $ 먼저, $ 중, $ 마지막 속성을 사용하면 트리거 이벤트에 사용할 수있다. 이 HTML에 대한 그래서 :

    <div ng-controller="Ctrl" my-main-directive>
      <div ng-repeat="thing in things" my-repeat-directive>
        thing {{thing}}
      </div>
    </div>
    

    당신과 같이 지시어를 사용할 수 있습니다 :

    angular.module('myApp', [])
    .directive('myRepeatDirective', function() {
      return function(scope, element, attrs) {
        angular.element(element).css('color','blue');
        if (scope.$last){
          window.alert("im the last!");
        }
      };
    })
    .directive('myMainDirective', function() {
      return function(scope, element, attrs) {
        angular.element(element).css('border','5px solid red');
      };
    });
    

    이 Plunker의 행동을 참조하십시오. 희망이 도움이!


  2. 2.당신은 단순히 루프의 끝 부분에 약간의 코드를 실행하려면, 여기에 별도의 이벤트 처리를 필요로하지 않는 약간 간단한 변화는 다음과 같습니다

    당신은 단순히 루프의 끝 부분에 약간의 코드를 실행하려면, 여기에 별도의 이벤트 처리를 필요로하지 않는 약간 간단한 변화는 다음과 같습니다

    <div ng-controller="Ctrl">
      <div class="thing" ng-repeat="thing in things" my-post-repeat-directive>
        thing {{thing}}
      </div>
    </div>
    
    function Ctrl($scope) {
      $scope.things = [
        'A', 'B', 'C'  
      ];
    }
    
    angular.module('myApp', [])
    .directive('myPostRepeatDirective', function() {
      return function(scope, element, attrs) {
        if (scope.$last){
          // iteration is complete, do whatever post-processing
          // is necessary
          element.parent().css('border', '1px solid black');
        }
      };
    });
    

    라이브 데모를 참조하십시오.


  3. 3.NG 반복 complete 이벤트가 특히 단지 지침을 만들 필요가 없습니다.

    NG 반복 complete 이벤트가 특히 단지 지침을 만들 필요가 없습니다.

    NG-초기화는 당신을 위해 마법을 수행합니다.

      <div ng-repeat="thing in things" ng-init="$last && finished()">
    

    $ 마지막 차종 있는지, 그 마지막 요소는 DOM에 렌더링되었을 때, 발사됩니다 만 완료했다.

    $ scope.finished 이벤트를 생성하는 것을 잊지 마십시오.

    코딩 해피!

    편집 : 2016 10월 23일

    어떤 항목이 다음 다음 해결 방법을 사용할 수 있습니다 배열이없는 경우 경우 당신은 또한 완성 된 함수를 호출 할

    <div style="display:none" ng-init="things.length < 1 && finished()"></div>
    //or
    <div ng-if="things.length > 0" ng-init="finished()"></div>
    

    그냥 NG 반복 요소의 상단에 위의 라인을 추가합니다. 이 배열은 임의의 값을 갖는 아닌지 확인하고 그에 따라 함수를 호출한다.

    EG

    <div ng-if="things.length > 0" ng-init="finished()"></div>
    <div ng-repeat="thing in things" ng-init="$last && finished()">
    

  4. 4.여기에 사실 때 지정된 함수를 호출하는 반복-완료 지시자입니다. 나는 호출 된 함수는 렌더링 된 요소에 도구 설명을 초기화로, DOM 조작을하기 전에 간격 = 0 $ 시간 제한을 사용해야 것으로 나타났습니다. jsFiddle : http://jsfiddle.net/tQw6w/

    여기에 사실 때 지정된 함수를 호출하는 반복-완료 지시자입니다. 나는 호출 된 함수는 렌더링 된 요소에 도구 설명을 초기화로, DOM 조작을하기 전에 간격 = 0 $ 시간 제한을 사용해야 것으로 나타났습니다. jsFiddle : http://jsfiddle.net/tQw6w/

    $ scope.layoutDone에서 $ 타임 아웃 라인을 주석과 주석을 시도 "정확하지를!" 툴팁의 차이를 볼 줄.

    <ul>
        <li ng-repeat="feed in feedList" repeat-done="layoutDone()" ng-cloak>
        <a href="{{feed}}" title="view at {{feed | hostName}}" data-toggle="tooltip">{{feed | strip_http}}</a>
        </li>
    </ul>
    

    JS :

    angular.module('Repeat_Demo', [])
    
        .directive('repeatDone', function() {
            return function(scope, element, attrs) {
                if (scope.$last) { // all are rendered
                    scope.$eval(attrs.repeatDone);
                }
            }
        })
    
        .filter('strip_http', function() {
            return function(str) {
                var http = "http://";
                return (str.indexOf(http) == 0) ? str.substr(http.length) : str;
            }
        })
    
        .filter('hostName', function() {
            return function(str) {
                var urlParser = document.createElement('a');
                urlParser.href = str;
                return urlParser.hostname;
            }
        })
    
        .controller('AppCtrl', function($scope, $timeout) {
    
            $scope.feedList = [
                'http://feeds.feedburner.com/TEDTalks_video',
                'http://feeds.nationalgeographic.com/ng/photography/photo-of-the-day/',
                'http://sfbay.craigslist.org/eng/index.rss',
                'http://www.slate.com/blogs/trending.fulltext.all.10.rss',
                'http://feeds.current.com/homepage/en_US.rss',
                'http://feeds.current.com/items/popular.rss',
                'http://www.nytimes.com/services/xml/rss/nyt/HomePage.xml'
            ];
    
            $scope.layoutDone = function() {
                //$('a[data-toggle="tooltip"]').tooltip(); // NOT CORRECT!
                $timeout(function() { $('a[data-toggle="tooltip"]').tooltip(); }, 0); // wait...
            }
    
        })
    

  5. 5.다음은 심지어 사용자 정의 지시어를 필요로하지 않는 겨-초기화를 사용하여 간단한 방법입니다. 그것은 예를 들어, 특정 시나리오에 나를 위해 잘 작동 것 NG-반복이 발생하기 전에 DOM에 완성 된 렌더링을 가질 때까지 스크롤 기능 요구 사항이 기다릴 수 있도록에 필요, 페이지로드의 특정 항목에 겨 - 반복되는 항목의 사업부를 자동으로 스크롤합니다.

    다음은 심지어 사용자 정의 지시어를 필요로하지 않는 겨-초기화를 사용하여 간단한 방법입니다. 그것은 예를 들어, 특정 시나리오에 나를 위해 잘 작동 것 NG-반복이 발생하기 전에 DOM에 완성 된 렌더링을 가질 때까지 스크롤 기능 요구 사항이 기다릴 수 있도록에 필요, 페이지로드의 특정 항목에 겨 - 반복되는 항목의 사업부를 자동으로 스크롤합니다.

    <div ng-controller="MyCtrl">
        <div ng-repeat="thing in things">
            thing: {{ thing }}
        </div>
        <div ng-init="fireEvent()"></div>
    </div>
    
    myModule.controller('MyCtrl', function($scope, $timeout){
        $scope.things = ['A', 'B', 'C'];
    
        $scope.fireEvent = function(){
    
            // This will only run after the ng-repeat has rendered its things to the DOM
            $timeout(function(){
                $scope.$broadcast('thingsRendered');
            }, 0);
    
        };
    });
    

    이 당신이 겨 반복이 처음 렌더링 후 1 시간을 호출 할 필요가 기능에만 유용합니다. 당신이 ng를 반복 내용이 다음 업데이트 때마다 함수를 호출해야하는 경우 사용자 정의 지시어로이 스레드에서 다른 답변 중 하나를 사용해야합니다.


  6. 6.파벨의 대답, 더 읽기 쉽게 이해할 수있는 무언가를 보완하는 것입니다 :

    파벨의 대답, 더 읽기 쉽게 이해할 수있는 무언가를 보완하는 것입니다 :

    <ul>
        <li ng-repeat="item in items" 
            ng-init="$last ? doSomething() : angular.noop()">{{item}}</li>
    </ul>
    

    처음에 왜 다른 사람이 angular.noop 생각이 ...?

    장점 :

    당신은 이것에 대한 지침을 작성할 필요가 없습니다 ...


  7. 7.아마 사용자 정의 지침의 필요없이 ngInit 및 Lodash의 디 바운스 방법으로 간단하게 접근 비트 :

    아마 사용자 정의 지침의 필요없이 ngInit 및 Lodash의 디 바운스 방법으로 간단하게 접근 비트 :

    제어 장치:

    $scope.items = [1, 2, 3, 4];
    
    $scope.refresh = _.debounce(function() {
        // Debounce has timeout and prevents multiple calls, so this will be called 
        // once the iteration finishes
        console.log('we are done');
    }, 0);
    

    주형:

    <ul>
        <li ng-repeat="item in items" ng-init="refresh()">{{item}}</li>
    </ul>
    

    삼항 연산자를 사용하는 경우에도 단순한 순수 AngularJS와 솔루션이 있습니다 :

    주형:

    <ul>
        <li ng-repeat="item in items" ng-init="$last ? doSomething() : null">{{item}}</li>
    </ul>
    

    아이 지침이 처리되기 전에, 즉 표현이 호출 - ngInit 사전 링크 컴파일 단계를 g 용한다는 점에 유의하십시오. 여전히 비동기 처리가 필요할 수 있습니다이 방법.


  8. 8.당신이 범위를 검사 할 때 그것은 또한 필요할 수 있습니다.에서는 setTimeout (someFn, 0)으로 트리거를 래핑하는 마지막 변수를 $. 에서는 setTimeout 0 자바 스크립트에서 허용 기술입니다 내 지시가 제대로 실행하는 것이 필수적이었다.

    당신이 범위를 검사 할 때 그것은 또한 필요할 수 있습니다.에서는 setTimeout (someFn, 0)으로 트리거를 래핑하는 마지막 변수를 $. 에서는 setTimeout 0 자바 스크립트에서 허용 기술입니다 내 지시가 제대로 실행하는 것이 필수적이었다.


  9. 9.나는 이런 식으로했다.

    나는 이런 식으로했다.

    이 지침을 만들기

    function finRepeat() {
        return function(scope, element, attrs) {
            if (scope.$last){
                // Here is where already executes the jquery
                $(document).ready(function(){
                    $('.materialboxed').materialbox();
                    $('.tooltipped').tooltip({delay: 50});
                });
            }
        }
    }
    
    angular
        .module("app")
        .directive("finRepeat", finRepeat);
    

    당신이 레이블에 추가 한 곳 NG 반복

    <ul>
        <li ng-repeat="(key, value) in data" fin-repeat> {{ value }} </li>
    </ul>
    

    그리고 그와 준비는 겨 반복의 끝에서 실행됩니다.


  10. 10.이것은 ($ 마지막 $ 심지어 $ 홀수 $ 인덱스, 제 $, $ 중간) 선언적 구문과 분리 영역을 사용하는 경우 (ngRepeat 특성에 액세스하는 방법을 표시하기 위해 다른 답변에 표현 된 아이디어의 개선 구글은 요소-지시어로) 가장 좋은 방법을 추천합니다. 기본 차이에 유의하십시오. 범위 $ 부모 지난 $..

    이것은 ($ 마지막 $ 심지어 $ 홀수 $ 인덱스, 제 $, $ 중간) 선언적 구문과 분리 영역을 사용하는 경우 (ngRepeat 특성에 액세스하는 방법을 표시하기 위해 다른 답변에 표현 된 아이디어의 개선 구글은 요소-지시어로) 가장 좋은 방법을 추천합니다. 기본 차이에 유의하십시오. 범위 $ 부모 지난 $..

    angular.module('myApp', [])
    .directive('myRepeatDirective', function() {
      return {
        restrict: 'E',
        scope: {
          someAttr: '='
        },
        link: function(scope, element, attrs) {
          angular.element(element).css('color','blue');
          if (scope.$parent.$last){
            window.alert("im the last!");
          }
        }
      };
    });
    

  11. 11.

    <div ng-repeat="i in items">
            <label>{{i.Name}}</label>            
            <div ng-if="$last" ng-init="ngRepeatFinished()"></div>            
    </div>
    

    항목이 반복의 마지막 있다면 내 솔루션은 함수를 호출하는 사업부를 추가하는 것이 었습니다.


  12. 12.내가 위의 대답 때문에, 다른 대답을 추가 할 이루어집니다 ngRepeat 후 실행하는 데 필요한 코드가이 경우에 모든 대답은 위의 다른 사람보다 좀 더 일반적인 위대하고 간단한 솔루션을 제공하는 각도 코드입니다 걸립니다, 그리고 경우에 그것의 중요한 당신이 $ 평가 대신에 $ 구문 분석을 사용하여 제외하고, 그것에 대해 벤 나델의 블로그에서 좀 걸릴 수 있습니다 수명주기 단계 다이제스트.

    내가 위의 대답 때문에, 다른 대답을 추가 할 이루어집니다 ngRepeat 후 실행하는 데 필요한 코드가이 경우에 모든 대답은 위의 다른 사람보다 좀 더 일반적인 위대하고 간단한 솔루션을 제공하는 각도 코드입니다 걸립니다, 그리고 경우에 그것의 중요한 당신이 $ 평가 대신에 $ 구문 분석을 사용하여 제외하고, 그것에 대해 벤 나델의 블로그에서 좀 걸릴 수 있습니다 수명주기 단계 다이제스트.

    하지만 내 경험에, 영업 상태로, 그 보통이 경우에 내가의 setTimeout 기능을 누르면됩니다 이후 가장 간단한 해결책은하는의 setTimeout과 지침을 만들 것을 발견 finnaly 컴파일 DOM에 일부 JQuery와 플러그인이나 방법을 실행 브라우저의 큐의 끝, 그이 모든 것이 각도에서 이루어집니다 항상 직후, 보통 ngReapet 기능을 postLinking 부모 후에 계속하는

    angular.module('myApp', [])
    .directive('pluginNameOrWhatever', function() {
      return function(scope, element, attrs) {        
        setTimeout(function doWork(){
          //jquery code and plugins
        }, 0);        
      };
    });
    

    $ 제한 시간을 사용하지 않는 이유는이 경우에 그 궁금 누구를 위해, 자사는 다른 완전히 불필요주기를 소화 유발한다는


  13. 13.나는 아래와 같이했다, 그래서 나는 겨 반복이 끝난 후 MathJax를 사용하여 공식을 렌더링했다, 위의 답변 중 누구도, 내 문제를 해결하지 않습니다. 그것은 좋은 솔루션은 아니지만 나를 위해 일한 ...

    나는 아래와 같이했다, 그래서 나는 겨 반복이 끝난 후 MathJax를 사용하여 공식을 렌더링했다, 위의 답변 중 누구도, 내 문제를 해결하지 않습니다. 그것은 좋은 솔루션은 아니지만 나를 위해 일한 ...

    <div ng-repeat="formula in controller.formulas">
        <div>{{formula.string}}</div>
        {{$last ? controller.render_formulas() : ""}}
    </div>
    

  14. 14.여기 잘 연습 해답을 찾았지만 지연이 추가 여전히 필요했다

    여기 잘 연습 해답을 찾았지만 지연이 추가 여전히 필요했다

    다음 지시문을 만듭니다

    angular.module('MyApp').directive('emitLastRepeaterElement', function() {
    return function(scope) {
        if (scope.$last){
            scope.$emit('LastRepeaterElement');
        }
    }; });
    

    이 같은 특성으로 중계기에 추가 :

    <div ng-repeat="item in items" emit-last-repeater-element></div>
    

    라두에 따르면 :

    $scope.eventoSelecionado.internamento_evolucoes.forEach(ie => {mycode});
    

    나에게 그것은 작동하지만, 난 여전히에서는 setTimeout를 추가해야

    $scope.eventoSelecionado.internamento_evolucoes.forEach(ie => {
    setTimeout(function() { 
        mycode
    }, 100); });
    

  15. 15.이 트릭을 할 것입니다 코드 아래, 다르게 렌더링 있도록 당신은 단순히 클래스 이름을 변경하고자하는 경우.

    이 트릭을 할 것입니다 코드 아래, 다르게 렌더링 있도록 당신은 단순히 클래스 이름을 변경하고자하는 경우.

    <div>
    <div ng-show="loginsuccess" ng-repeat="i in itemList">
        <div id="{{i.status}}" class="{{i.status}}">
            <div class="listitems">{{i.item}}</div>
            <div class="listitems">{{i.qty}}</div>
            <div class="listitems">{{i.date}}</div>
            <div class="listbutton">
                <button ng-click="UpdateStatus(i.$id)" class="btn"><span>Done</span></button>
                <button ng-click="changeClass()" class="btn"><span>Remove</span></button>
            </div>
        <hr>
    </div>
    

    내가 스트릭 저점 글꼴로 내 쇼핑 목록에있는 쇼핑 아이템을 렌더링하는 유사한 요구가있을 때이 코드는 나를 위해 일했다.

  16. from https://stackoverflow.com/questions/13471129/ng-repeat-finish-event by cc-by-sa and MIT license