angularjs - 有条件地在 angular.js 中添加元素属性

标签 angularjs

这个问题在这里已经有了答案:





What is the best way to conditionally apply attributes in AngularJS?

(13 个回答)


6年前关闭。




我正在尝试基于 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">
    ...

最佳答案

一种简单的解决方案是使用 ng-if根据条件生成dom。

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

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

所以如果 is_autoplaytrue ,第一个元素将使用 autoplay 生成属性和第二个不会在 dom 中。

如果 is_autoplayfalse , 第二个 dom 元素将在没有 autoplay 的情况下生成属性。

关于angularjs - 有条件地在 angular.js 中添加元素属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24136040/

相关文章:

css - Kendo Menu dataSource imageUrl 不接受内容

javascript - Angularjs 延迟日志运行计时器任务

javascript - 在 Angular 上使用 vm 打印数据

javascript - 无法使用键盘选择 Bootstrap 下拉列表的元素

javascript - 应该在渲染 View 后运行的代码放在哪里?

jquery - 如何从其他元素动画完成中获取 `callback`,而不是从 self 指令中获取

javascript - AngularJS ng-repeat 和表单验证

angularjs - Protractor Js 运行到 linux 机器

javascript - 为什么使用 `::` 表达式的 native 一次性绑定(bind)在 Angular 1.3.5 中不起作用

css - angularJS 在 ng-repeat 中使用构造函数但不会应用 css 样式和位置?