2014-06-10 10 views
21

Próbuję dodać atrybut automatycznego odtwarzania do tagu wideo na podstawie zmiennej zasięgu is_autoplay.warunkowo dodaj atrybut elementu w angular.js

Przeszukałem cały Internet, ale nie mogłem znaleźć dokładnie tego fragmentu, który chciałem.

Próbowałem podążać, ale żaden z nich nie działa.


<video autoplay="{{is_autoplay ? 'true' : 'false'}}"> 
    ... 

<video ng-attr-autoplay="{is_autoplay}"> 
    ... 

Ktoś nawet zaproponował następującą

<video {{is_autoplay ? "autoplay" : ""}}> 
    ... 


Następujące rozwiązanie rozwiązało mój problem.

app.directive('attronoff', function() { 
    return { 
    link: function($scope, $element, $attrs) { 
     $scope.$watch(
      function() { return $element.attr('data-attr-on'); }, 
      function (newVal) { 
       var attr = $element.attr('data-attr-name'); 

       if(!eval(newVal)) { 
        $element.removeAttr(attr); 
       } 
       else { 
        $element.attr(attr, attr); 
       } 
      } 
     ); 
     } 
    }; 
}); 

Każdy może użyć tej dyrektywy, aby dodać/usunąć atrybut warunkowo.

Usage

<video width="100%" height="100%" controls attronoff data-attr-on="{{is_autoplay}}" data-attr-name="autoplay"> 
    ... 
+1

Wiem, że jest późno, ale może być przydatna. Dla kąta 1.3+ i atrybutu bez wartości (np. Autoplay lub wymagany) możesz użyć "niezdefiniowanego": ''. Został usunięty, ponieważ ng-attr- ma funkcję allOrNothing usuwania atrybutu, jeśli wyrażenie jest niezdefiniowane. –

Odpowiedz

6

jednym prostym rozwiązaniem byłoby wykorzystanie ng-if do generowania DOM na podstawie warunku.

Na przykład w przypadku, używać

<video autoplay="true" ng-if="is_autoplay">...</video> 
<video ng-if="!is_autoplay">...</video> 

Więc jeśli is_autoplay jest true, pierwszy element będzie generowana z atrybutem autoplay a po drugie nie będzie w dom.

Jeśli is_autoplay jest false, drugi element dom zostanie wygenerowany bez atrybutu autoplay.

+5

dzięki. Wiem, że to zadziała, ale ta metoda nie zawsze jest dobrym wyborem. – adeltahir

2

Można także bezpośrednio ustawić atrybut autoplay opartą na nieruchomości is_autoplay:

<video autoplay="{{is_autoplay}}">...</video> 
+3

"Atrybut autoplay jest atrybutem boolean. Gdy jest obecny, dźwięk automatycznie rozpocznie odtwarzanie, gdy tylko będzie mógł to zrobić bez zatrzymywania." – gugol

Powiązane problemy