Angularjs 从内部视图向实体添加类

Angularjs 从内部视图向实体添加类,angularjs,html,Angularjs,Html,我有一个应用程序,当点击缩略图时,一个模式将打开并播放连接到缩略图的视频。我需要做的是在这个模式打开时向body标签添加一个类,这样我就可以停止在模式后面滚动body内容 我正在使用ng单击来激活ng显示和ng if。问题是所有这些都在ng repeat的范围内,而ng repeat又在视图的范围内。我是新来的,任何帮助都将不胜感激 <div class="videos" ng-controller="modalCtrl"> <ul> <li class

我有一个应用程序,当点击缩略图时,一个模式将打开并播放连接到缩略图的视频。我需要做的是在这个模式打开时向body标签添加一个类,这样我就可以停止在模式后面滚动body内容

我正在使用ng单击来激活ng显示ng if。问题是所有这些都在ng repeat的范围内,而ng repeat又在视图的范围内。我是新来的,任何帮助都将不胜感激

<div class="videos" ng-controller="modalCtrl">
  <ul>
    <li class="clear-fix" ng-repeat="video in filtered = videos | filter:search | startFrom:(currentPage-1)*entryLimit | limitTo:entryLimit">


      <!-- THIS ACTIVATES THE MODAL WHEN CLICKED -->
      <div ng-click="showModal = !showModal" class="item-thumbnail float-left pointer" back-img="{{video.thumbnail}}">
      </div>


      <div class="item-details-container float-left">
        <div class="item-header">
          <div ng-click="showModal = !showModal" class="item-title pointer">
            <h3 class="underline">{{video.title}}</h3>
          </div>

          <div class="item-author pointer">
            <span>by: <a class="underline" ui-sref="{{video.author_link}}">{{video.author}}</a></span>
          </div>
        </div>

        <div class="item-description">
          <p>{{video.description.trunc(150)}}</p>
        </div>
      </div>



      <!-- THIS IS THE MODAL BACKGROUND COVER -->
      <div ng-show="showModal" class="modal-cover"></div>



      <!-- THIS IS THE MODAL -->
      <div ng-show="showModal" class="modal-container">
        <div ng-if="showModal" class="video-modal clear-fix">
          <button class="btn-close" ng-click="$parent.showModal = false">
            <span></span>
            <span></span>
          </button>

          <div class="video-container float-left">
            <youtube-video video-url="video.url"></youtube-video>
          </div>

          <div class="video-info-container float-right">
            <div class="video-info">
              <div class="item-header">
                <div class="item-title">
                  <h3>{{video.title}}</h3>
                </div>

                <div class="item-author pointer">
                  <span>by: <a class="underline" ui-sref="{{video.author_link}}">{{video.author}}</a></span>
                </div>
              </div>

              <div class="item-description">
                <p>{{video.description}}</p>
              </div>
            </div>

            <div class="voting-container clear-fix">
              <div class="votingButton btn-solid pointer" ng-click="upVote(video); showDetails = !showDetails">
                <i class="fa fa-thumbs-o-up" aria-hidden="true"></i>
              </div>
              <div class="bugButton btn-solid pointer">
                <i class="fa fa-flag-o" aria-hidden="true"></i>
              </div>
              <div ng-show="showDetails = showDetails"><span>Thank you for voting.</span></div>       
            </div>
          </div>
        </div>
      </div>
    </li>
  </ul>
</div>

  • {{video.title} 作者:{{video.author} {{video.description.trunc(150)}

    {{video.title} 作者:{{video.author} {{video.description}

    谢谢你的投票。
您正在寻找指令

因此,如果您将此添加到要禁用滚动的body元素中,它将提供您要查找的内容:

<div ng-class="{'is-modal-open': showModal}">

您可以在模板中创建一个div,如下所示:

<div class="fullscreen-modal">
//content here
</div>
现在,您的元素是
的直接子元素

在ng repeat之外定义模态div

然后定义一个作用域函数

$scope.openModal() = function(contentOrVideoId) 
    {
        //put logic here
        $scope.showModal = true;
        $scope.modalContent = contentOrVideoId;
    }

只需在ng repeat中调用此函数,并使用
ng click=“openModal('IdOrContent')”

以下是您需要执行的操作:

您可以像这样在body标记中使用ng类

<body ng-class="{'is-modal-open': freeze}">
<div class="thumbnail" ng-click="is-modal-open=true"></div>

你可以像这样在你的缩略图上点击

<body ng-class="{'is-modal-open': freeze}">
<div class="thumbnail" ng-click="is-modal-open=true"></div>


我认为问题在于body标记超出了他的控制范围。我希望他没有试图直接在body标记上添加该类,但我将添加一个澄清,我需要在body标记上添加一个类,该类超出ng repeat和view的范围。这很讨厌,我不喜欢,但你可以改为更新$rootScope。我编辑了我的答案,效果很好,谢谢。你能告诉我为什么这样做不好吗。这是否会导致其他问题?我将尝试此方法,但考虑到模态在ng repeat中,此方法是否会为ng repeat中的每个元素追加模态?如果按类名选择元素,则可能会出现这种情况。但是您可以创建一个动态类名,如class=“modal no-{{key}}”。。。我的意思是,更好的方法是为modal创建一个指令。或者你可以在ng repeat之外定义modal div,然后调用一个处理逻辑的函数。为什么你需要在body中添加一个类?它在你的应用程序之外?在移动屏幕上,modal内容需要滚动。为了防止出现两个滚动条,我需要在模式打开时将body overflow设置为hidden。主体在视图之外,而不是应用程序和主控制器。