2014-04-04 18 views
5

qual è il modo angolare di aggiornare una variabile rootScope da una direttiva? ho difficoltà a capire come funzionano gli ambiti nelle direttive ...

finora posso solo modificare la variabile sul livello di ambito.

app.run(['$rootScope', function($rootScope) { 
    $rootScope.foo = false; 
} 

app.directive('myDirective', [function(){ 
    return { 
     restrict: 'A', 
     link: function(scope, elem, attrs) { 
      elem.bind('click', function() { 
       scope.$parent.foo = true; 
       scope.$parent.apply(); 
      }); 
     } 
    } 
}]); 

<!-- does not update foo --> 
<p>{{ foo }}</p> 

<!-- updates foo --> 
<div my-directive><p>{{ foo }}</p></div> 

risposta

7

Se avete bisogno di accedere $rootScope ovunque è necessario iniettare esso e sarà disponibile:

app.directive('myDirective', ['$rootScope', function($rootScope) { 
    return { 
     restrict: 'A', 
     link: function(scope, elem, attrs) { 
      elem.bind('click', function() { 
       $rootScope.foo = true; 
       $rootScope.$apply(); 
      }); 
     } 
    } 
}]); 

C'è anche un altro approccio più semplice che non richiede l'iniezione. Ogni oggetto scope ha accesso al più alto $ rootScope tramite il riferimento $root. Significa che potresti anche fare questo:

scope.$root.foo = true; 
+0

grazie. così ovvio. dovevo anche includere $ rootScope. $ apply(); dopo aver impostato la variabile per aggiornarla. – vesperae

+0

@vesperae Salve, quando ho chiamato $ rootScope. $ Apply(), c'è un errore generato: https://docs.angularjs.org/error/$rootScope/inprog?p0=$apply –

+0

@PhuNguyen, che significa angularjs sta facendo $ digest per te – Irshu

Problemi correlati