2016-01-12 104 views
1

我加載視頻動態基於資源的範圍陣列上:如何在Angular-Bootstrap模式中播放視頻內容打開?

this.open = function (size, resource) { 
    var modalInstance = $uibModal.open({ 
     templateUrl: 'playModal.html', 
     controller: 'ModalInstanceCtrl', 
     size: size, 
     resolve: { 
      resource: function() { 
       return resource; 
      } 
     } 
    }); 

    modalInstance.rendered.then(function() { 
     $('#resource-video')[0].play(); 
    }); 
}; 

正如你所看到的,我使用jQuery選擇找到HTML5視頻標籤,並在回調中發揮它的模態的rendered事件。什麼是「角度的方式」來做到這一點,並保持MVC紀律?

回答

1

您可以創建一個原始JavaScript「類」,負責處理給定原始dom元素的視頻。例如

function VideoControl(videoElement) { 
    this.videoElement = videoElement; 
} 

VideoControl.prototype.play = function() { 
    this.videoElement.play(); 
} 

VideoControl.prototype.pause = function() { 
    this.videoElement.pause(); 
} 

爲了實例化它並實際上將dom元素傳遞給它,你可以將它包裝在指令中。例如

app.directive('videoControl', function($parse) { 
    return { 
    restrict: 'A', 
    link: function(scope, element, attrs) { 
     var videoControlModel = $parse(attrs.videoControl); 
     videoControlModel.assign(scope, new VideoControl(element[0])); 
    } 
    }; 
}) 

然後你可以使用這個視頻控制指令是這樣的:

<button ng-click="videoControl.play()">Play</button> 

<video class="video" controls video-control="videoControl"> 
    ... 
</video> 

這裏是一個工作plunker:https://plnkr.co/edit/2epHSCo6wwyCplNhOBSe?p=preview

+0

我不知道我知道如何將其應用到模態回調場景。 – isherwood

+0

你可以用'$ scope.videoControl.play()'代替'$('#resource-video')[0] .play();'代碼行。或者,如果您使用控制器作爲'this.videoControl.play()'的語法。視頻控制指令將VideoControl類的實例分配給您傳入的任何變量名稱 – rob

+0

謝謝。我現在跟着。然而,三項功能加上一項指令只是爲了保持關注點的分離,這是一個難以忍受的難題。我想看看還有哪些其他想法。 – isherwood

相關問題