在运行中设置公共范围变量

时间:2014-12-02 15:42:46

标签: angularjs angularjs-scope

我正在使用 AngularJS 开发一个Web应用程序,我想知道如何设置一些$scope变量,这些变量是我所有控制器的公共变量(或很大一部分它们)。

我在尝试什么:

angular.module('starter', ['ionic', 'starter.controllers', 'starter.services', 'ui.bootstrap'])
  .run(function($ionicPlatform, $rootScope, $location, Common) {
    $ionicPlatform.ready(function() {

      //Set default global values
      $rootScope.$on('$stateChangeSuccess', function (event) {
        $scope.universe = "Universe and other things :)";
        $scope.elsewhere = "Good day sir";
        $scope.fish = "Perfectly well";
      });
    });
  });
});

因此,我不必每次都在每个控制器中编写相同的内容:

angular.module('starter.controllers').controller('Controller1', function($scope) {
  //I don't want this:
  $scope.universe = "Universe and other things :)";
});

angular.module('starter.controllers').controller('Controller2', function($scope) {
  //I don't want this:
  $scope.elsewhere = "Good day sir";
});

angular.module('starter.controllers').controller('Controller3', function($scope) {
  //I don't want this:
  $scope.fish = "Perfectly well";
});

重要的是我甚至不希望为此目的使用services,因为我不想在每个控制器中进行分配。

1 个答案:

答案 0 :(得分:4)

添加到我的评论中:

这就是我要做的,为我的应用程序创建一个控制器,这将是我的“全球”东西。

.controller('AppCtrl', ['$scope', function AppCtrl($scope) {

    $scope.$on('$stateChangeSuccess', function () {
        $scope.universe = "Universe and other things :)";
        $scope.elsewhere = "Good day sir";
        $scope.fish = "Perfectly well";
    });

});

并将其添加到您的HTML中:

<html ng-app="myAppName" ng-controller="AppCtrl">

因此,这将创建一个单独的$scope,以便从其他“子”控制器访问该范围,您需要$scope.$parent

但是,如果我们采用您的原始代码,这应该有效:

angular.module('starter', ['ionic', 'starter.controllers', 'starter.services', 'ui.bootstrap'])
  .run(function($ionicPlatform, $rootScope, $location, Common) {
    $ionicPlatform.ready(function() {

      //Set default global values
      $rootScope.$on('$stateChangeSuccess', function (event) {
        $rootScope.universe = "Universe and other things :)";
        $rootScope.elsewhere = "Good day sir";
        $rootScope.fish = "Perfectly well";
      });
    });
  });
});

然后您就可以在控制器中使用$rootScope,或在HTML /视图中使用universe等。