Подтвердить что ты не робот

Условно добавить атрибут элемента в angular.js

Я пытаюсь добавить атрибут autoplay в тег видео на основе переменной области видимости is_autoplay.

Я искал по всему Интернету, но я не мог найти точный фрагмент, который я хотел.

Я пробовал, но никто из них не работает.


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

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

Кто-то даже предложил следующее

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


Ниже была решена моя проблема.

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);
                }
            }
        );
        }
    };
});

Любой пользователь может использовать эту директиву для условного добавления/удаления атрибута.

Usage

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

Ответ 1

Одним простым решением было бы использовать ng-if для генерации dom на основе условия.

Например, в вашем случае используйте

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

Итак, если is_autoplay - true, первый элемент будет сгенерирован с атрибутом autoplay, а второй - не будет в dom.

Если is_autoplay - false, второй элемент dom будет сгенерирован без атрибута autoplay.

Ответ 2

Вы также можете напрямую настроить атрибут автовоспроизведения на основе свойства is_autoplay:

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