Javascript 为什么更改$scope变量不会在angular js中显示带有ng show的元素

Javascript 为什么更改$scope变量不会在angular js中显示带有ng show的元素,javascript,angularjs,video,Javascript,Angularjs,Video,我正在开发一个带有视频的简单网站 这是一个带有我的页面代码的plunker: 我的网站上有一个视频,带有html5标签video,你可以播放并暂停它 播放或停止视频时,将显示/隐藏带有$scope变量的播放图标 <label ng-click="video()" ng-show="!playing" class="playButton"></label> 视频完成时会显示警报,因此事件会正确触发。我更改播放变量的值的方式有问题。里面的代码 video.onended =

我正在开发一个带有视频的简单网站

这是一个带有我的页面代码的plunker:

我的网站上有一个视频,带有html5标签
video
,你可以播放并暂停它

播放或停止视频时,将显示/隐藏带有
$scope
变量的播放图标

<label ng-click="video()" ng-show="!playing" class="playButton"></label>
视频完成时会显示警报,因此事件会正确触发。我更改
播放
变量的值的方式有问题。

里面的代码

video.onended = function() {
    // body
};
在外部执行,因此无法知道
$scope.playing
已更改

解决此问题的一种方法是将函数更改为

video.onended = function() {
   $scope.$apply(function(){
      //body
   });
};

我已经更新了您的。

似乎适合我。“播放”按钮按预期显示和消失。视频结束时不会显示警报,按钮仍然隐藏
video.onended = function() {
   $scope.$apply(function(){
      //body
   });
};