我目前有$watch
检查screenize中的更改并相应地设置变量。
$rootScope.$watch('windowView', function(view) {
if (view === 'small') {
self.device = 'mobile';
}
});
我在父控制器中执行此逻辑,但我想在子控制器中访问此变量。访问子项中的父变量可以正常工作:
$scope.controller.device
但是,当手表仅更新了父范围时,孩子不会更新。
我希望能够动态访问监视值,而不会在每个子控制器中重复$rootScope.$watch
吗?
我尝试创建一个包含$rootScope.$watch
的服务,然后在我的每个控制器中调用它,但是我得到的是相同的onload值而不是on watch。
答案 0 :(得分:0)
我在jsfiddle上创建了一个demo。 该演示包含父ctrll和子ctrll,它们通过控制器从父级共享设备属性。 在控制器上我听resize事件并更新设备属性 'mobile'以防$ window.innerWidth< 800其他设备将是'桌面'
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) {});