2016-11-17 53 views
1

在角設定變量,我留意窗口的大小和在控制器上改變「裝置」變量如果寡婦寬度超過某一閾值:窗口調整大小控制器不工作

var myModule = angular.module("MyApp", []) 
    .controller('MyController', function(UseHttp){ 

     // store reference of "this" 
     var self = this; 

     function setDevice(){ 
      var wWidth = $(window).width(); 
      var theDevice; 

      if (wWidth <= 991 && wWidth > 767) { 
      theDevice = "narrow desktop"; 
      } else if (wWidth <= 767 && wWidth > 620) { 
      theDevice = "iPad"; 
      } else if (wWidth <= 620 && wWidth > 500) { 
      theDevice = "largeMobile"; 
      } else if (wWidth <= 500 && wWidth > 320) { 
      theDevice = "mediumMobile"; 
      } else if (wWidth <= 320) { 
      theDevice = "smallMobile"; 
      } else { 
      theDevice = "desktop"; 
      } 

      self.device = theDevice;   
     } 

     //self.device gets set on window resize 
     $(window).resize(function(){ 
     setDevice(); 
     $scope.$apply(); //but where do I store the var $scope? 
     }); 

     //self.device gets set right away 
     setDevice(); 

}).service('UseHttp', function($http) {.... 

但對於某種原因,當我改變窗口大小以達到一個新的閾值視圖上的這個p標籤不更新(但它確實表明了最初的「設備」)

<article ng-controller="MyController as myCtrl" class="content-wrapper"> 
    <p>{{myCtrl.device}}</p> 

回答

2

通過在resize事件沒有設置設備正在更新模型時觸發摘要循環。你需要用$範圍做手工$適用()這樣的:

$(window).resize(function() { 
    setDevice(); 
    $scope.$apply(); 
}); 
+0

我建議做$從setDevice()調用內申請(),因爲這實際上是範圍突變哪裏發生。 –

+0

@YonaAppletree - 這樣做的問題是,當摘要已經在進行時,最初調用setDevice()。 – jbrown

+0

這個唯一的問題 - 在窗口調整大小我得到錯誤:'找不到變量:$ scope'。我更新了我的代碼以顯示我的完整控制器。我在哪裏存儲$ scope變量? – NewToJS