【问题标题】:How to use Angular $scope.variable from controller 1 in ng-class of div using controller 2如何使用控制器 2 在 div 的 ng 类中使用控制器 1 中的 Angular $scope.variable
【发布时间】:2019-09-14 08:01:10
【问题描述】:

我有 2 个控制器 boxController.js 和 homeController.js。在 box.html 页面上,我初始化了 boxController.js。现在,我需要在 box.html 页面上使用 ng-class,但我需要在 ng-class 中使用的变量在 homeController.js 中

我已经尝试过服务和工厂,但是这些返回的变量可以在多个控制器之间共享。我对在 html 中使用共享变量感到困惑,而不是在控制器中。

**** homeController.js ****

$scope.defaultState = false;
$scope.submitNow = false;

$scope.default = function () {
    $scope.defaultState = !$scope.defaultState
}

$scope.defaultToggle = function () {
    $scope.submitNow = !$scope.submitNow
}

**** box.html (This page uses boxController.js, not homeController.js) ****


// I need to use $scope.submitNow and $scope.defaultState variables in the ng-class of this div

<div ng-controller="boxController" class="ui" ng-class="{'two.column.grid' : submitNow, 'one.column.grid' : defaultState}">
</div>

【问题讨论】:

    标签: javascript angularjs angularjs-scope angular-controller angular1.6


    【解决方案1】:

    你有一些方法可以做到这一点

    1. 使用 $rootScope
    2. 使用 $watch
    3. 使用工厂创建共享上下文

    【讨论】:

      【解决方案2】:

      只需添加到@ChickenSoups 的答案,您还可以使用$on$broadcast。你可以在homeController.js

      $scope.defaultState = false;
      $scope.submitNow = false;
      
      
      $scope.default = function () {
          $scope.defaultState = !$scope.defaultState;
         $rootScope.$broadcast('some-event', { defaultState: $scope.defaultState, submitNow:  $scope.submitNow});
      }
      
      $scope.defaultToggle = function () {
          $scope.submitNow = !$scope.submitNow;
          $rootScope.$broadcast('some-event', { defaultState: $scope.defaultState, submitNow:  $scope.submitNow});
      
      }
      
      

      在您的 boxController.js 中,您可以像下面这样捕获此事件:

      $scope.$on('some-event', function(event, args) {
      
          $scope.defaultState = args.defaultState;
          $scope.submitNow = args.submitNow;
      
      });
      

      【讨论】:

      • 谢谢!我得到了它的工作,但有一个不寻常的问题。你知道为什么会发生这种情况以及如何解决这个问题吗?默认 ng 类工作正常,因为它以正确的顺序添加“两列网格”,但在 or 条件下,它不会以正确的顺序添加类。一个柱网被添加为...柱网一个
      • @wibwaj 让你知道我的超能力是用问题的细节而不是心灵感应来回答问题。因此,如果您也可以告诉我unusual problem 是什么,那就太好了,我将能够为您提供帮助。
      • 大声抱歉,我按 Enter 换行,但提交了我的文本。我最终更新了我的帖子。请再次检查!
      • @wibwaj 我在您的代码中的任何地方都没有看到OR 条件?你想达到什么目的? (另外我建议您关闭此问题并针对您当前的问题创建另一个问题,因为此问题与当前问题无关)
      • 完成!你能看看这个吗? *.com/questions/57935040/…
      最近更新 更多