Angular.js: Ist es möglich, alle Übertragungen zu erfassen und zu protokollieren?

Erstellt am 29. Jan. 2014  ·  3Kommentare  ·  Quelle: angular/angular.js

Das habe ich versucht:

$rootScope.$on("$broadcast", function ($event) {
    console.log("BROADCAST: " + $event.name);
});

Ist dies etwas, das es gibt (konnte keine Dokumente dafür finden) oder jemals implementiert werden oder ist der Overhead zu groß?

Meine Gedanken stammen aus den $route- Ereignisdokumenten, zB $routeChangeSuccess .

Hilfreichster Kommentar

Dies wird, wie Sie sagen, aufgrund des Overheads wahrscheinlich nie umgesetzt.

Es ist jedoch möglich, einen Notifier in Ihrer eigenen App zu implementieren, sodass Sie mithilfe von Dekoratoren eine Möglichkeit erstellen können, Ihre eigene App zu benachrichtigen.

app.config(function($provide) {
  $provide.decorator("$rootScope", function($delegate) {
    var Scope = $delegate.constructor;
    var origBroadcast = Scope.prototype.$broadcast;
    var origEmit = Scope.prototype.$emit;

    Scope.prototype.$broadcast = function() {
      console.log("$broadcast was called on $scope " + $scope.$id + " with arguments:",
                         arguments);
      return origBroadcast.apply(this, arguments);
    };
    Scope.prototype.$emit = function() {
      console.log("$emit was called on $scope " + $scope.$id + " with arguments:",
                         arguments);
      return origEmit.apply(this, arguments);
    };
    return $delegate;
  });
});

Hier ist ein kurzes Beispiel: http://plnkr.co/edit/cn3MZynbpTYIcKUWmsBi?p=preview

Alle 3 Kommentare

Dies wird, wie Sie sagen, aufgrund des Overheads wahrscheinlich nie umgesetzt.

Es ist jedoch möglich, einen Notifier in Ihrer eigenen App zu implementieren, sodass Sie mithilfe von Dekoratoren eine Möglichkeit erstellen können, Ihre eigene App zu benachrichtigen.

app.config(function($provide) {
  $provide.decorator("$rootScope", function($delegate) {
    var Scope = $delegate.constructor;
    var origBroadcast = Scope.prototype.$broadcast;
    var origEmit = Scope.prototype.$emit;

    Scope.prototype.$broadcast = function() {
      console.log("$broadcast was called on $scope " + $scope.$id + " with arguments:",
                         arguments);
      return origBroadcast.apply(this, arguments);
    };
    Scope.prototype.$emit = function() {
      console.log("$emit was called on $scope " + $scope.$id + " with arguments:",
                         arguments);
      return origEmit.apply(this, arguments);
    };
    return $delegate;
  });
});

Hier ist ein kurzes Beispiel: http://plnkr.co/edit/cn3MZynbpTYIcKUWmsBi?p=preview

Bitte erwägen Sie in Zukunft, die Mailingliste , den IRC-Kanal oder den Stackoverflow zu fragen, bevor Sie ein Problem

Wow nett. Danke Caitlin.

Auch bemerkt; mein Fehler

Am Mittwoch, 29. Januar 2014, Caitlin Potter [email protected]
schrieb:

Bitte erwägen Sie in Zukunft, in der Mailingliste https://groups.google.com/forum/#!forum/angular nachzufragen .
IRC-Kanal http://webchat.freenode.net/?channels=angularjs oder
stackoverflow http://stackoverflow.com/questions/tagged/angularjbevor Sie ein Problem posten, jedoch --- dies ist in erster Linie für Fehler gedacht
Verfolgung.


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf Gi tHub anhttps://github.com/angular/angular.js/issues/6043#issuecomment -33610626
.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

awerlang picture awerlang  ·  3Kommentare

jtorbicki picture jtorbicki  ·  3Kommentare

jetta20162 picture jetta20162  ·  3Kommentare

brijesh1ec picture brijesh1ec  ·  3Kommentare

ceymard picture ceymard  ·  3Kommentare