2017-01-23 65 views
1

問題似乎出現在名爲EventFactory的工廠中。工廠中有兩個聲明是問題。它們是:

 $scope.$on('event:updateStuff', function (event, data) { 
      myObj = data; 
     }); 

     $scope.$on('event:updateOtherStuff', function (event, data) { 
      myArray.push(data); 
     }); 

這些聲明被罰款之前的工作,現在我不能,除非我註釋掉整個$scope.$on讓頁面呈現。自從我上次成功運行應用程序以來,我沒有做任何代碼更改,因此這種行爲非常令人意外。控制檯上不顯示錯誤消息。

在註釋掉內部語句的同時還原$scope.$on不能解決問題。我已經評論了他們,頁面仍然無法呈現。

這將導致頁失敗:

 $scope.$on('event:updateStuff', function (event, data) { 
      myObj = data; 
     }); 

     $scope.$on('event:updateOtherStuff', function (event, data) { 
      myArray.push(data); 
     }); 

這也導致頁面失敗:

 $scope.$on('event:updateStuff', function (event, data) { 
      /*myObj = data;*/ 
     }); 

     $scope.$on('event:updateOtherStuff', function (event, data) { 
      /*myArray.push(data);*/ 
     }); 

只有註釋掉整個$scope.$on確實頁面加載速度:

 //$scope.$on('event:updateStuff', function (event, data) { 
      //myObj = data; 
     //}); 

     //$scope.$on('event:updateOtherStuff', function (event, data) { 
      //myArray.push(data); 
     //}); 
+0

@ A.J爲了清晰我編輯過。我在說,它不是被'$ scope。$ on'調用的導致該問題的函數,而是'$ scope。$ on'的存在導致頁面無法加載。 – Legion

+0

如果你'console.log($ scope,$ scope。$ on)',你會得到什麼? – dave

+0

你能發佈整個控制器代碼嗎? – GPicazo

回答

2

服務通常不會像控件一樣訪問$scope ler的確如此。充其量,它可以將其作爲參數傳遞給它的方法,也可以注入$rootScope服務。

最簡單的可能只是確保您在工廠/服務中注入並參考$rootScope而不是$scope