有条件地在angular.js中添加一个元素属性

ade*_*hir 22 angularjs

我正在尝试根据is_autoplay范围变量向视频标记添加自动播放属性.

我搜索了整个互联网,但我找不到我想要的确切片段.

我试过跟随,但没有一个工作.


<video autoplay="{{is_autoplay ? 'true' : 'false'}}">
    ...
Run Code Online (Sandbox Code Playgroud)
<video ng-attr-autoplay="{is_autoplay}">
    ...
Run Code Online (Sandbox Code Playgroud)

有人甚至提出以下建议

<video {{is_autoplay ? "autoplay" : ""}}>
    ...
Run Code Online (Sandbox Code Playgroud)

以下解决了我的问题.

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);
                }
            }
        );
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

任何人都可以使用此指令有条件地添加/删除属性.

Usage

<video width="100%" height="100%" controls attronoff data-attr-on="{{is_autoplay}}" data-attr-name="autoplay">
    ...
Run Code Online (Sandbox Code Playgroud)

gur*_*uru 7

一个简单的解决方案是用于ng-if根据条件生成dom.

例如,在您的情况下,使用

<video autoplay="true" ng-if="is_autoplay">...</video>
<video ng-if="!is_autoplay">...</video>
Run Code Online (Sandbox Code Playgroud)

因此,如果is_autoplaytrue,第一个元素将使用autoplay属性生成,第二个元素将不在dom中.

如果is_autoplayfalse,则将生成第二个dom元素而没有autoplayattribue.

  • 谢谢.我知道这会起作用,但这种方法并不总是一个好的选择. (6认同)