AngularJS 工厂在 ng-class 内的 body 标签不起作用

标签 angularjs controller factory angular-services ng-class

被告知创建服务/工厂并在全局 Controller 上使用它。这是我第一次听到全局 Controller 。不管怎样,我创建了一个名为 Scroll 的工厂并将其注入(inject)到我们的 main.controller.js 中。工厂中的函数 isScrollingEnabled 返回 true 或 false。另一个函数是 setScrolling ,它将把变量设置为 true 或 false。默认值设置为 true。

在主 Controller 内,我有这段代码

$scope.scrollEnabled = Scroll.isScrollingEnabled();
console.log('value of $scope.scrollEnabled', $scope.scrollEnabled);

该代码在控制台中输出 true,这很好。

在我的模板上,我就是这样使用的。我有将滚动设置为 false 的按钮。控制台中的值输出 false,这很好。

<body ng-class="{ 'scrolling' : scrollEnabled }">

但是,它不起作用。如果我将其更改为下面编写的代码,它就可以工作

<body ng-class="{ 'scrolling' : false }">

所以我想,它不在范围内,特别是 ui-view 在 index.html 中,并且 main.controller.js 和 main.html 将在 ui-view 中加载。 在此之前,它告诉我,main.controller.js 内的任何范围都无法在 ui-view 之外工作。

那么解决这个问题的方法是什么?

抱歉没有发布工厂。在这里

  .factory('Scroll', function() {

    var scrollEnabled = true; // i then changed it to false hoping it will work, it didn't

    var ScrollEvent = {
      isScrollingEnabled: function () {
        return scrollEnabled;
      },
      disablePageScrolling: function() {
        scrollEnabled = false;
      }
    };

    return ScrollEvent;
});

最佳答案

$scope您附加值的 Controller 的值不会扩展到 <body>元素。相反,您可以组合一个指令:

.directive('shouldScroll', function (Scroll) {
  return {
    restrict: 'A',
    link: function ($scope, elem) {
      $scope.$watch(Scroll.isScrollingEnabled, function (n) {
        if (n) {
          elem.addClass('scrolling');
        } else if (n === false) {
          elem.removeClass('scrolling');
        }
      });
    }
  };
});

你可以像这样将它附加到主体上:

<body should-scroll>

关于AngularJS 工厂在 ng-class 内的 body 标签不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30473991/

相关文章:

javascript - AngularJS - 如何将纯 JavaScript 插件转换为 Angular 指令(?)

javascript - 变量未定义 : AngularJS

javascript - 强制 ng-include 重新渲染

java工厂模式问题

angularjs - 如何在 AngularJS 绑定(bind)中获取小数的整个部分

javascript - 如何在 Angularjs 中的主详细信息中设置唯一值

javascript - 插入数组后 Angular 清除对象

ipad - 如何在弹出窗口中显示操作表?

php - 通过 formFactory 选项传递用户

java - 如何获得实现通用接口(interface)的特定类的工厂而无需进行强制转换?