【问题标题】:How to toggle display of two elements in AngularJS如何在AngularJS中切换两个元素的显示
【发布时间】:2017-03-31 15:12:56
【问题描述】:

我们试图在单击第一个元素时切换两个元素的显示,即,当我单击缩略图时,我只想显示该缩略图的视频并隐藏该缩略图,其余缩略图应保持不变。

HTML 代码

<div class="list card" ng-repeat="video in videos" >
<div class="item item-image">
   <img ng-src="{{video.snippet.thumbnails.medium.url}}" ng-click="displayvideo(this)">
   <div class="embed-responsive embed-responsive-16by9" style="display : none;" id="vid1">
       <youtube-video class="embed-responsive-item" video-id="video.id.videoId" player-vars="playerVars"></youtube-video>
   </div>
</div>

AngularJS 代码

$scope.displayvideo = function(this){
    this.style.display = none;
    var ele = angular.element('#vid1');
    ele.style.display = float;
}

【问题讨论】:

标签: javascript angularjs youtube


【解决方案1】:

你可以试试这个

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div class="item item-image">
   <img ng-show="!isvideoPlaying" ng-src="{{video.snippet.thumbnails.medium.url}}" ng-click="displayvideo()">
   <div ng-show="isvideoPlaying" class="embed-responsive embed-responsive-16by9" style="display : none;" id="vid1">
   <youtube-video class="embed-responsive-item" video-id="video.id.videoId" player-vars="playerVars"></youtube-video>
</div>
</div>

AngularJS 代码

$scope.isvideoPlaying = false;
$scope.displayvideo = function(){
   $scope.isvideoPlaying = true;
}

【讨论】:

  • 感谢您的回复。在此代码之前有一个 ng-repeat。我如何才能将此逻辑仅应用于该特定元素而不是所有元素
  • 在“视频”对象中添加一个属性。像 video.IsPlaying 之类的东西。使用它来切换 ng-show 中的视图。
【解决方案2】:
<div class="item item-image">
   <img ng-show="display" ng-src="{{video.snippet.thumbnails.medium.url}}" ng-click="display=!display">
   <div ng-show="!display" class="embed-responsive embed-responsive-16by9" style="display : none;" id="vid1" ng-click="display=!display">
       <youtube-video class="embed-responsive-item" video-id="video.id.videoId" player-vars="playerVars"></youtube-video>
   </div>
</div>

并设置你的

$scope.display=true;

将其设置为true 最初将显示缩略图,点击缩略图后,视频将不可见,缩略图将被隐藏.

【讨论】:

  • 感谢您的回复。在此代码之前有一个 ng-repeat。我怎样才能将此逻辑仅应用于该特定元素而不是全部
【解决方案3】:

您也不需要在控制器中编写任何函数。只需切换一个范围变量,如下所示:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-repeat="video in allVideos">
<div class="item item-image">
   <img ng-src="{{video.snippet.thumbnails.medium.url}}" ng-click="showVideo = true" ng-hide="video.showVideo">
   <div class="embed-responsive embed-responsive-16by9" style="display : none;" id="vid1" ng-show="video.showVideo">
       <youtube-video class="embed-responsive-item" video-id="video.id.videoId" player-vars="playerVars"></youtube-video>
   </div>
</div>
</div>

在你的控制器中:

var allVideos = {"data":[{"id":{"video_id":"Vid-1"},"snippet":{"thumbnails":{"medium":{"url":"http://sampleVideoThumnail1.jpg"}}}},{"id":{"video_id":"Vid-2"},"snippet":{"thumbnails":{"medium":{"url":"http://sampleVideoThumnail2.jpg"}}}}]}

假设您的视频数据类似于上面的数组,一旦您获取数据,您可以遍历上面的数组并在每个对象中添加一个新键,如下所示:

$scope.allVideos = allVideos.data.map(function (eachVideo){
  return eachVideo.showVideo = false;
});

您可以在视频上设置一个按钮来关闭视频并通过将“showVideo”设置为 true 来显示缩略图。

【讨论】:

  • 感谢您的回复。在此代码之前有一个 ng-repeat。我怎样才能将此逻辑仅应用于该特定元素而不是全部
  • @kireeti 您可以在视频数组的每个对象中添加相同的 showVideo 键,该对象是 ng 重复的。我已经更新了我的答案,请检查并让我知道这是否是您所期望的。
【解决方案4】:

使用ng-show / ng-hide / ng-if 是最好的方法,但现在你使用这样的东西,

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div class="item item-image">
   <img ng-src="{{video.snippet.thumbnails.medium.url}}" ng-click="displayvideo(video)">
   <div class="embed-responsive embed-responsive-16by9" ng-style="video.myStyle" id="vid1">
       <youtube-video class="embed-responsive-item" video-id="video.id.videoId" player-vars="playerVars"></youtube-video>
   </div>
</div>

在控制器中:

$scope.displayvideo = function(video){
    video.myStyle={'display':'none'}
}

如果你想初始化 myStyle 使用

ng-init="video.myStyle={'display':'float'}"

【讨论】:

  • 我们正在使用一个 ng-repeat 函数。所以我们如何将此逻辑仅应用于该特定缩略图
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-20
  • 2013-05-10
  • 2019-05-24
  • 1970-01-01
  • 2016-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多