Wie kann man der Löschung von Direktiven folgen

Das AngularJs Framework von Javascript ist sehr beliebt und sehr nützlich. Wenn Sie ein AngularJs-Entwickler sind, wissen Sie wahrscheinlich über AngularJs-Directiven. AngularJs Direktiven erlauben es uns, den Code mehr im "OOP"-Modus zu verwenden, es ist wie bei "Classes". Sie können eine Direktive erstellen und viele Objekte mit dem Typ dieser Direktive verwenden.

Wie Sie schon gesehen haben, sind ngRepeat, ngClick, ngShow, ngHide usw. AngularJs-Direktiven. Lassen Sie uns ein wenig über ngRepeat-Direktive sprechen.

ngRepeat ist eine populäre Direktive und sie ist sehr nützlich. Sie können es benutzen, wo immer Sie möchten. Sie können eine Direktive erstellen und das Objekt dieses Direktiventyps mit ngRepeat verwenden. Auf diese Weise können Sie viele Objekte verwenden.

Lassen Sie uns ein Beispiel sehen:

<script>
    angular.module('MyModule',[...])
        .directive('myDirective',function(){...});
</script>
...
<my-directive ng-repeat="item in items"></my-directive> // Wenn Sie eine Direktive mit "Restrict: E"  erstellen

Stellen Sie sich nun vor, dass Sie wissen möchten, wo die Direktive entfernt wurde (wenn Sie ngRepeat mit ihnen verwenden und jedes Element aus dem Array entfernen). Sie denken wahrscheinlich, warum ist das wichtig, wann die Direktive entfernt wurde. Zum Beispiel. Sie haben einige Punkte in Ihrer Datenbank und möchte sie auf der Karte zeichnen. Sie werden diese Daten aus der Datenbank lesen, sie an AngularJs senden und AngularJs muss sie zeichnen.

Sie können eine Direktive mit dem Namen Marker erstellen und sie auf Ihren Daten verwenden. Es sieht so aus:

<script>
    angular.module('Map', [...])
        .directive('marker', function(){...}) // Diese Direktive zeichnet die Markierungen auf der Karte.
</script>

...

<marker ng-repeat="marker in dbMarkers"></marker> // Markierungen auf der Karte

Nehmen wir an, dass Sie ein beliebiges Element (Marker) entfernen wollen. Sie können nur sein Element im Array entfernen, und ngRepeat wird es für Sie tun. Aber der Marker wird nicht von der Karte entfernt, und Sie werden sehen, dass Sie sich nicht sicher sind. Haben Sie das Element entfernt oder nicht? Haben Sie das passende Element entfernt? usw. ... Also, was kann man tun?

Hier ist die Lösung: Jedes DOM-Element (Direktive) hat das Ereignis $destroy. Dieses Ereignis läuft, bevor Ihr Artikel entfernt wird. So können Sie es wie folgt verwenden.

angular.module('MyModule')
    .drective('marker', function(){
        return {
          ...
          link: function(scope,el,...){
             el.bind('$destroy',function(){
                  // do whatever you want
                  // zum Beispiel marker.setMap(null), um den Marker von der Karte zu entfernen.
             })
          }
        }
    })