2013-12-11 63 views
3

我有一個視圖加載的角控制器:角控制器多次實例化

<div ng-controller="MyCtrl"> 
    <p ng-bind-html="content"></p> 
</div> 

這種部分被加載到不同的視圖,並且作爲結果,控制器被多次實例化。在控制器中,我爲檢測位置的變化:

angular.module('MyApp') 
    .controller('HintCtrl', function ($scope, $rootScope) { 
    $rootScope.$on('$locationChangeSuccess', function() { 
     alert("HI"); 
    }); 
}); 

每次我改變我的位置,這每個控制器是有史以來加載時間觸發一次。我怎樣才能讓這個運行只有一次?

+0

也許你應該處理在父控制器的事件。這是角度如何工作,並且每個控制器都能看到事件的一致性。 – luxcem

回答

6

重點是控制器不是單身人士。你將爲每個元素都有一個新的實例。

你可以做什麼,就是在service上使用這個,這個是singleton。

你可以做這樣的事情:

angular.module('MyApp') 
    .controller('HintCtrl', function ($scope, Alerter) { 
    Alerter.doSomething(); 
    }) 

    .service('Alerter', function($rootScope) { 
    $rootScope.$on('$locationChangeSuccess', function() { 
     alert("HI"); 
    }); 

    this.doSomething = function() { 
     ... 
    }; 
    });