如何有条件地改变指令范围 - angularjs

时间:2018-03-01 20:22:19

标签: javascript angularjs angularjs-directive conditional youtube-data-api

更新

伙计们对代码进行了一些更改,并意识到我可以使用ng-if来显示我需要的内容。已经回答here

我需要一个指示,显示来自live if的数据,否则显示来自最后一个视频的数据,通过根据条件响应更改指令范围。

我试过这样的事情:

directive.js

var directive = {
    link: link,
    restrict: 'EA',
    templateUrl: 'path',
    scope: {
        video: '='
    }
};
return directive;

function link(scope, element, attrs) {

    if(scope.video == 'undefined') {
        scope.video = NEW_SCOPE; //e.g 'vm.live.items'
    }

}

directive.html

<div class="container">
    <div class="video-description">
        <h4>{{video.snippet.title}}</h4>
    </div>
</div>

范围参考

<live-iframe video="vm.activity.items"></live-iframe>

我正在使用Youtube数据API(v3)。

要获取最后一个视频,我使用activities.list方法,该方法会返回上次上传的视频中的ID。 之后,我使用videos.list方法,使用activities.list方法返回的ID,并将其用作参数来获取最后一个视频。 (即时通讯使用这两种方法,因为第一种方法不会将视频统计信息视为视图,喜欢等)

要获得直播,我想使用search.list方法返回直播内容(包括ID),但由于this我无法使用它。

正如audiomasonanswer上说的那样,为了获得直播,我在iframe的src属性上使用了一个url,它返回了一个频道的直播(如果它不在那一刻,它会返回一些默认屏幕,例如&#39;直播结束&#39;)。 但它只返回现场,我也想要标题。因此,要使用https://www.youtube.com/embed/live_stream?channel=CHANNEL_ID进行直播,并获取实时标题,即时使用youtube api的search.list方法。

返回上一个视频

  1. 获取最后一个视频ID - activities.method
  2. 使用ID作为GET最后视频内容的参数,包括统计信息(观看,喜欢等) - videos.method
  3. 返回现场

    1. 获取实时内容(标题) - search.method
    2. 使用频道直播网址 - https://www.youtube.com/embed/live_stream?channel=CHANNEL_ID
    3. 我做了两个函数,第一个更改了embed url

      function checkIfLive() {
          var liveIframe = '<iframe class="liveIframe" width="480" height="270" src="https://www.youtube.com/embed/live_stream?channel=UC8racR0Ko9HzKpIBAPvifKw" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>';
          if (vm.live.items[0] == undefined) {
              $(".video").append(  vm.activity.items[0].player.embedHtml );
          } else {
              $(".video").append( liveIframe );
          }
      }
      

      第二个改变了范围,留下了我的问题。

      function link(scope, element, attrs) {
      
          if(scope.video == 'undefined') {
              scope.video = NEW_SCOPE; //e.g 'vm.live.items'
          }
      
      }
      

0 个答案:

没有答案