2013-12-11 12 views
5

Ho avuto questa direttiva in angularJS Sono in grado di passare un attributo di classe a un modello di direttiva in angularJS?

productApp.directive('notification', function($timeout) { 
    return { 
     restrict : 'E', 
     replace : true, 
     scope : { 
      type: "@", 
      message: "@" 
     }, 
     template : '<alert class="alert alert-type">message</alert>', 
     link : function(scope, element, attrs) { 
      $timeout(function() { 
       element.hide(); 
      }, 3000); 
     } 
    } 
}); 

così posso chiamarlo dalla vista in questo modo:

<notification type="alert.type" message="alert.msg"></notification> 

Nel controllore ho ottenuto l'oggetto avviso definito:

$scope.alert = { type : 'success', msg : 'This is a test'}; 

Come sono in grado di passare il tipo in modo dinamico? provato e non ha funzionato. Se passo il successo di allerta alla direttiva, funziona, ma voglio che sia dinamico.

Sono in grado di passarlo dinamicamente facendo ciò?

Grazie

risposta

4

tenta di modificare la direttiva a questo:

productApp.directive('notification', function($timeout) { 
    return { 
     restrict : 'E', 
     replace : true, 
     scope : { 
      type: "=", 
      message: "=" 
     }, 
     template : '<alert class="alert alert-{{type}}">{{message}}</alert>', 
     link : function(scope, element, attrs) { 
      $timeout(function() { 
       // element.hide(); 
      }, 3000); 
     } 
    } 
}); 

Dal momento che avete isolato uso portata = di legare proprietà ambito padre

Demo Fiddle

+0

Grazie ha funzionato! :) – msqar

+1

Puoi anche usare '&' per creare un legame unidirezionale, dal momento che ' = 'è bidirezionale. Basta cambiare '=' a '&', e il modello per contenere '{{type()}}' e '{{message()}}'. Ciò è utile se si desidera impedire modifiche all'ambito principale o si desidera essere in grado di fornire alla direttiva funzioni aggiuntive ai valori. – HackedByChinese

0

nella funzione di collegamento, si può fare qualcosa di simile attrs.type e attrs.msg per recuperare il valore che si passa alla direttiva.

+0

Sì, ma come faccio a inviare al modello come parte del tipo di avviso di proprietà? ho bisogno di fare il tipo di avviso per essere dinamico, provato a impostare il modello dal collegamento e non ha funzionato :( – msqar

Problemi correlati