Javascript 如何使用控制器2在div的ng类中使用控制器1的Angular$scope.variable

Javascript 如何使用控制器2在div的ng类中使用控制器1的Angular$scope.variable,javascript,angularjs,angularjs-scope,angular-controller,angular1.6,Javascript,Angularjs,Angularjs Scope,Angular Controller,Angular1.6,我有两个控制器boxController.js和homeController.js。在box.html页面上,我初始化了boxController.js。现在,我需要在box.html页面上使用ng类,但我需要在ng类中使用的变量是在homeController.js中 我尝试过服务和工厂,但这些返回变量可以在多个控制器之间共享。不知何故,我对在html中使用共享变量而不是在控制器中使用感到困惑 **** homeController.js **** $scope.defaultState =

我有两个控制器boxController.js和homeController.js。在box.html页面上,我初始化了boxController.js。现在,我需要在box.html页面上使用ng类,但我需要在ng类中使用的变量是在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>
**homeController.js****
$scope.defaultState=false;
$scope.submitNow=false;
$scope.default=函数(){
$scope.defaultState=!$scope.defaultState
}
$scope.defaultToggle=函数(){
$scope.submitNow=!$scope.submitNow
}
****html(此页面使用boxController.js,而不是homeController.js)****
//我需要在这个div的ng类中使用$scope.submitNow和$scope.defaultState变量

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

  • 使用$rootScope
  • 使用$watch
  • 使用工厂创建共享上下文

  • 只需添加到@chickensups的答案中,您还可以使用
    $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条件下,它没有以正确的顺序添加类。将添加一个柱网轴线作为。。。柱网one@wibwaj让你知道我的超能力是用问题的细节来回答问题,而不是心灵感应。因此,如果你也能告诉我什么是
    异常问题
    ,那就太好了,我将能够帮助你。Lol对不起,我按enter键换行了,但这已经提交了我的文本。我最终更新了我的帖子。请再次检查@wibwaj我在您的代码中没有看到
    条件?你想达到什么目标?(我还建议您关闭此问题,并用当前问题创建另一个问题,因为此问题与当前问题无关)完成!你能看看这个吗?