2016-01-15 168 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

相關問題