通过$ rootScope $ watch函数在控制器之间共享数据

时间:2016-01-15 14:45:13

标签: angularjs watch rootscope

我目前有$watch检查screenize中的更改并相应地设置变量。

$rootScope.$watch('windowView', function(view) {
    if (view === 'small') {
        self.device = 'mobile';
    }
});

我在父控制器中执行此逻辑,但我想在子控制器中访问此变量。访问子项中的父变量可以正常工作:

$scope.controller.device

但是,当手表仅更新了父范围时,孩子不会更新。

我希望能够动态访问监视值,而不会在每个子控制器中重复$rootScope.$watch吗?

我尝试创建一个包含$rootScope.$watch的服务,然后在我的每个控制器中调用它,但是我得到的是相同的onload值而不是on watch。

1 个答案:

答案 0 :(得分:0)

我在jsfiddle上创建了一个demo。 该演示包含父ctrll和子ctrll,它们通过控制器从父级共享设备属性。 在控制器上我听resize事件并更新设备属性 'mobile'以防$ window.innerWidth< 800其他设备将是'桌面'

DEMO jsfiddle

angular.module('app', []).controller('parentCtrl', function($scope, $window) {
var self = this;

var w = angular.element($window);
w.on('resize', function(event) {
  if ($window.innerWidth < 800) {
    $scope.$apply(function() {
      self.device = 'mobile';
    });
  } else {
    $scope.$apply(function() {
      self.device = 'desktop';
    });
  }
});}).controller('childCtrl', function($scope) {});