2012-10-13 11 views
5

ho definito alcuni modelli in App.run di sotto del quale sto imperativi all'interno del controller someCtrl:

App.run(['$rootScope', function($rootScope) { 
    $rootScope.attempt = 1; 
}); 

function someCtrl($scope, $rootScope) { 
    $rootScope.attempt = 2; 

    $rootScope.checkAttempt = function() { 
    return $rootScope.attempt > 1 ? true : false;  
    }; 
} 

C'è un pulsante sulla pagina di someCtrl's portata:

<button class='btn' ng-disabled="checkAttempt()">Who's changing my value?</button> 

Cordiali saluti, ho Sono a conoscenza della creazione di un servizio o dell'utilizzo del meccanismo emit-broadcaste per condividere i dati tra i controller, ma mi piacerebbe sapere quanto è autenticato iniettare $ rootScope in un controller?

risposta

10

IMHO, penso che sia giusto iniettare $rootScope in un controller. Vorrei raccomandare l'uso di emettere/trasmettere.

+0

Una cosa che riguarda l'utilizzo di rootScope è la possibilità di trasmettere a tutti gli ambiti figlio. Un'altra nota e, quando si usano gli ambiti, la migliore pratica è quella di non collegarsi direttamente all'ambito, ovvero creare oggetti sugli ambiti, quindi $ rootScope.my = {tentativo: 1}. Questa è la chiave per l'associazione dei dati a due vie e si è meno propensi a perdere l'associazione. –

7

Non è necessario iniettare $ rootScope in un controller. Quando si inietta $ scope, si ha automaticamente accesso a qualsiasi cosa definita in $ rootScope a causa dell'ereditarietà dell'ambito. Vedi documentation. Scorri verso il basso fino alla sezione Gerarchie di portata.

1

Bene, non vi è alcun danno nell'iniettare un $rootScope in un controller, servizi o direttive ma si tenta di capire se è davvero necessario. Il motivo è che qualsiasi metodo o proprietà associato a $rootScope lo rende globale che non sarà GC a meno che non venga pulito manualmente e crea tutti quei problemi che le variabili globali creano.

Il modo migliore per condividere i dati tra più controller è utilizzare un servizio.

Problemi correlati