2015-02-12 61 views
0

如果我使用這樣的指令鏈接功能:事件偵聽與一個角指令上<video> element.on不會觸發

var vdo = element.find('video')[0]; 
vdo.on('loadstart', function() { 
    console.log('onloadstart'); 
}); 

不執行代碼。相反,我必須使用:

vdo.onloadstart = function() { 
    console.log('onloadstart'); 
}; 

vdo.addEventListener('loadstart', function() { 
    console.log('onloadstart'); 
}); 

有人能解釋我爲什麼?是否使用addEventListener是個問題?

+0

你怎麼觸發'loadstart'? – DonJuwe 2015-02-12 07:53:35

+0

設置控制器的源 loxy 2015-02-12 08:00:42

+0

您是否在'

回答

1

角方式將是一個自定義的指令:

var myApp = angular.module('myApp',[]); 
 

 
function MyCtrl($scope) { 
 
    $scope.src = 'w3schools.com/html/mov_bbb.mp4'; 
 
    $scope.myFunc = function() { 
 
     alert('loadstart!'); 
 
    }; 
 
} 
 

 
myApp.directive('onLoad', function() { 
 
    return { 
 
    restrict: 'A', 
 
    scope: { 
 
     func: '&onLoad' 
 
    }, 
 
    link: function(scope, element) { 
 
     element.on('loadstart', function() { 
 
     scope.func(); 
 
     }); 
 
    } 
 
    }; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="myApp" ng-controller="MyCtrl"> 
 
    <video controls on-load="myFunc()"> 
 
    <source ng-src="{{src}}"> 
 
    </video> 
 
</div>

+0

是的。你也可以這樣做。尼斯。順便說一下,但是如何用&-attrib綁定執行父函數? 無論如何,這不是我的問題,因爲你的代碼也不會被執行! – loxy 2015-02-12 10:15:42

+0

已更新的答案。 – DonJuwe 2015-02-12 10:36:27

+0

沒有。您不能在元素上創建兩個隔離範圍。我的指令還需要一個獨立的範圍。但我重申,這不能解決我的問題...... – loxy 2015-02-12 12:31:45

相關問題