2015-06-22 16 views
6

Ho una preoccupazione quando si crea una direttiva personalizzata in angolare. Quando utilizzo una funzione di collegamento, non sono sicuro di quale sia la vera differenza quando accedo agli attributi con attrs o scope. Prendete questo pezzo di codice, ad esempio: Ambito direttiva personalizzato vs attrs

myApp.directive('someDirective', function() { 
    return { 
     restrict: 'E', 
     replace: true, 
     scope: { 
      title: '=title' 
     }, 
     template: '<img/>', 
     link: function(scope, element, attrs) { 
      if (scope.title) { 
       // do something here 
      } 
      if (attrs.title){ 
       // do something here 
      } 
     }, 
    } 

Dalle mie osservazioni accesso 'titolo' attributo attrs e dal campo di applicazione ha un effetto simile. Qual è la vera differenza?

+0

Si prega di guardare questo http://stackoverflow.com/questions/14300986/angularjs-directive-isolated-scope-and-attrs –

risposta

19

La differenza è che l'attributo è di tipo String per definizione. Sempre. Nel tuo caso attrs.title sarà letteralmente una stringa uguale a qualsiasi cosa tu passi all'attributo in HTML.

Tuttavia, scope.title viene analizzato e valutato il risultato dell'attributo attr.title.

Es. Se si utilizza qualcosa di simile in HTML

<some-directive title="name"></some-directive> 

dove $scope.name = "Thomas Mann" definita nel campo di applicazione, poi attr.title sarà stringa "name", mentre scope.title sarà "Thomas Mann".

+0

risposta impressionante. Per aggiungere a ciò, puoi anche fare 'scope. $ Eval (attrs.title)' per ottenere una versione analizzata dell'attributo nel contesto dell'ambito. –

+0

Tutto qui? Penso che quando usi @ per l'ambito di binding, viene passato anche come stringa, quindi ha lo stesso effetto, giusto? – Marcin86

+1

@ Marcin86, praticamente qualcosa passato in un attributo è una stringa e qualcosa passato come variabile di ambito può essere qualsiasi tipo di dati. Ma puoi anche fare 'scope. $ Eval (attrs.title)' per valutare l'attributo nel contesto dell'oscilloscopio, come ho commentato sopra. –

Problemi correlati