2014-06-10 20 views
21

Tôi đang cố thêm thuộc tính autoplay vào thẻ video dựa trên biến phạm vi is_autoplay.có điều kiện thêm thuộc tính phần tử trong angular.js

Tôi đã tìm kiếm tất cả qua internet, nhưng tôi không thể tìm thấy đoạn trích chính xác mà tôi muốn.

Tôi đã thử làm theo nhưng không có cách nào trong số đó hoạt động.


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

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

Có người thậm chí còn gợi ý sau

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


Sau đây giải quyết được vấn đề của tôi.

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

Bất kỳ ai cũng có thể sử dụng chỉ thị này để thêm/xóa thuộc tính có điều kiện.

Usage

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

Tôi biết nó là muộn, nhưng có thể hữu ích. Đối với góc 1,3+ và thuộc tính không có giá trị (ví dụ: tự động phát hoặc yêu cầu), bạn có thể sử dụng 'không xác định': ''. Nó bị xóa vì ng-attr- có tính năng allOrNothing của việc xóa thuộc tính nếu biểu thức mang lại không xác định. –

Trả lời

6

Một giải pháp đơn giản sẽ được sử dụng để tạo ra các ng-if dom dựa trên điều kiện.

Ví dụ trong trường hợp của bạn, sử dụng

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

Vì vậy, nếu is_autoplaytrue, yếu tố đầu tiên sẽ được tạo ra với autoplay thuộc tính và thứ hai trên sẽ không được trong dom.

Nếu is_autoplayfalse, yếu tố dom thứ hai sẽ được tạo ra mà không có sự autoplay attribue.

+5

cảm ơn. Tôi biết điều này sẽ làm việc, nhưng phương pháp này không phải luôn luôn là một lựa chọn tốt. – adeltahir

2

Bạn cũng có thể trực tiếp đặt thuộc tính autoplay dựa trên tài sản is_autoplay của bạn:

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

"Thuộc tính autoplay là thuộc tính boolean.Khi hiện tại, âm thanh sẽ tự động bắt đầu phát ngay sau khi có thể thực hiện mà không dừng lại". – gugol

Các vấn đề liên quan