2015-05-15 13 views
5

W dyrektywie chcę sprawdzić, czy element ma atrybut, zanim wykonam jakąś funkcję na nim. Ale nie widzę niczego stworzonego dla tego w jqLite docs.Odpowiednik AngularJS dla hasAttribute()?

np. :

.directive('noReadonly', function() { 

    return { 
     link: function($scope, $element, $attr, ctrl) { 

     $element.on('focus', function() { 
      if ($element.hasAttribute('readonly')) 
      $element.removeAttr('readonly'); 
     }); 

     }, 
    } 
    }) 
+1

'if (angular.isDefined ($ attr.readonly)) {...}' – Blackhole

Odpowiedz

9

$attr to obiekt z atrybutami, więc można z nim pracować jak normalny:

if($attr.hasOwnProperty("readonly")) 

Jak wspomniano w komentarzach, to sprawdza, czy właściwość istnieje. Ten element spowodowałoby prawdziwej odpowiedzi:

<input name="test" readonly> 

Jeśli chcesz również sprawdzić dla wartości truthy można przedłużyć logicznych:

if($attr.hasOwnProperty("readonly") && $attr.readonly) {} 

Zauważ, że wartości atrybutów są analizowane jako ciągi, więc $attr.readonly jest równy "true" (String), a nie true (Boolean).

+0

Czy to sprawdzić, jeśli ma taką właściwość, lub jeżeli wartość nieruchomości została określona? –

+1

Sprawdza, czy właściwość istnieje. – azium

+0

Działa to w kontekście 'link'. Jak korzystać z tego w kontekście "kompilacji"? – ganeshk

1
if ($attr.readonly) { 
    ... 
} 
else { 
    //doesn't have it. 
}