UI-Router - Bereich nicht zerstört Zustand zu ändern?

Ich bin ein neuer Benutzer, AngularJS und ui-router, und ich bin versucht zu drehen, mein Kopf herum wie der Umfang verwaltet wird. Ich hatte erwartet, des Geltungsbereichs einer active-controller zerstört werden würde, wenn es inaktiv wird, auf Zustand zu ändern, jedoch, es scheint nicht der Fall zu sein.

Habe ich geändert am Beispiel von UI-Router ist die Webseite um die situation zu illustrieren (siehe plunker unten). Jedes mal, wenn der Staat route1.Liste/route2.Liste ausgelöst wird, die Sie emittieren, ein Ereignis auf den $rootScope. Nach Erhalt den Fall, eine debug-Anweisung wird gedruckt auf Konsole.

Durch Umschalten zwischen den beiden Staaten ein paar mal, es wird beobachtet, dass der Controller initialisiert zuvor reagierte der Veranstaltung. So erscheint es, dass die Bereiche, die von Ihnen erstellt wurden, wurden nie zerstört. Ist dieses Verhalten zu erwarten? Wenn ja, was soll ich tun, so dass nur aktive Controller wird auf ein Ereignis reagiert?

Plunker

Debug-Meldung gedruckt, die auf der Konsole:
UI-Router - Bereich nicht zerstört Zustand zu ändern?

Code:

var myapp = angular.module('myapp', ["ui.router"])
myapp.config(function($stateProvider, $urlRouterProvider){

//For any unmatched url, send to /route1
$urlRouterProvider.otherwise("/route1")

hier ist die route1

$stateProvider
  .state('route1', {
      url: "/route1",
      templateUrl: "route1.html"
  })
    .state('route1.list', {
        url: "/list",
        templateUrl: "route1.list.html",
        controller: function($rootScope, $scope){
          $rootScope.$emit("eventCT1");
          $rootScope.$on("eventCT2", fn);
          function fn () {
            console.log("Controller 1 receives an event emitted by Controller 2");
          }
          $scope.items = ["A", "List", "Of", "Items"];
        }
    })

und hier ist die route 2

  .state('route2', {
      url: "/route2",
      templateUrl: "route2.html"
  })
    .state('route2.list', {
        url: "/list",
        templateUrl: "route2.list.html",
        controller: function($rootScope, $scope){
          $rootScope.$emit("eventCT2");
          $rootScope.$on("eventCT1", fn);
          function fn () {
            console.log("Controller 2 receives an event emitted by Controller 1");
          }
          $scope.things = ["A", "Set", "Of", "Things"];
        }
    })
 ...
InformationsquelleAutor CLDev | 2015-11-28
Schreibe einen Kommentar