2016-01-15 122 views
0

我目前有一个$watch,用于检查屏幕大小的更改并相应地设置变量。

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

我做这个逻辑父控制器内,但我想有机会获得儿童控制器,这个变量。访问孩子中的父变量工作正常:

$scope.controller.device 

然而,当手表只更新父范围子不更新。

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

我试过创建一个包含$rootScope.$watch的服务,然后在每个控制器中调用该服务,但是我得到的onload值与on watch相反。

+0

使用的对象不是原始为变量...那么你将有整个应用程序的对象继承和内部手表将更新视图 – charlietfl

回答

0

我在jsfiddle上创建了一个演示。 该演示包含通过父级控制器共享设备属性的父级ctrll和子级ctrll。 “移动”的情况下, 在控制器我听设备属性调整大小事件,并更新到 $ 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) {}); 
+0

这似乎有同样的问题,它改变为移动,但然后再也不会更新 – gardni

相关问题