2015-10-26 30 views
0

我要當點擊第一個表項在同一page.when做檢查元素的數據在另一個表中的數據是越來越設置第一個控制器,但然後流程中斷,沒有數據被填充。數據沒有被比較,沒有在另一個控制器中調用,也沒有數據顯示。當項目點擊表,相關數據應該得到填充在其他表中thae同一屏幕

控制器1:

 $scope.selectSport=function (data) { 
    sportsCategoryService.setSportData(data); 
    } 

控制器2:

 $scope.populateTable = function (data) { 
    $scope.sportItems = data; 
    $timeout(function() { 
     $("#example1").dataTable(); 
    }, 200) 
}; 
if (!sportsCategoryService.isSportSelected()) { 
    $location.path('/sportsCategory'); 
} 

sportsCategoryService.getSubSportsData(function (subSportsData) { 
    $scope.populateTable(subSportsData); 
}) 

服務:

 function getSports(callback) { 
     AuthenticationService.loadSportsCategory(function (response) { 
      if (response.data.success === true) { 
       localStorage.setItem("sportData", JSON.stringify(response.data)); 
       callback(true); 
      } 
     }); 
    } 

    function isSportSelected() { 
     return JSON.parse(localStorage.getItem("sportsData")) ? true : false; 
    } 

    function getSportsData() { 
     return JSON.parse(localStorage.getItem("sportData")); 
    } 

    function getSportsId() { 
     return JSON.parse(localStorage.getItem("sportsData"))._id; 
    } 

    function getSubSportsData(callback) { 


     getSports(function (response) { 
      if (response == true) { 


       var sportsId = getSportsId(); 

       var Sports = getSportsData(); 


       for (var i = 0; i < Sports.sportsData.length; i++) 
        if (Sports.sportsData[i].sports === sportsCategoryId) { 

         localStorage.setItem("sportsData", JSON.stringify(SportsCategory.sportsData[i])); 
         callback(JSON.parse(localStorage.getItem("sportsData")).subSports ? JSON.parse(localStorage.getItem("sportsData")).subSports : null); 
         break; 
        } 
      } 

     }); 
    } 

    function setSportData(data) { 
     localStorage.setItem("sportsData", JSON.stringify(data)); 
    } 

    function getSportData(data) { 
     return JSON.parse(localStorage.getItem("sportedData")); 
    } 

    function setSportsData(data) { 
     localStorage.setItem("sportData", JSON.stringify(data)); 
    } 



    function updateSports(data, callback) { 
      AuthenticationService.editSportsCategory(data, function (response) { 
       if (response.data.success == true) { 
        setSportsData(data); 
        callback(true); 
       } 
      }); 
    } 
+0

你什麼意思通過'流breaks'做?查看您調用哪個控制器函數來填充數據? – Reza

+0

我打電話給「getSubSportsData()」來填充數據。並且流動braeks意味着當使用斷點時它不去比較數據並且出來。 –

+0

用於比較'Sports.sportsData [i] .sports === sportsCategoryId''sportsCategoryId'從哪裏來? 'Sports.sportsData [i] .sports'包含ID嗎?在for循環中放置'console.log',然後看看會發生什麼。 – Reza

回答

0

你的流量確實是壞......你從控制器將數據發送到服務,但隨後你不要求任何服務,所以一切都停在那裏。

你必須認識到這:

sportsCategoryService.getSubSportsData(function (subSportsData) { 
    $scope.populateTable(subSportsData); 
}) 

只調用一次,當你控制器2被初始化。你想要的是每次數據改變時調用回調函數,而不僅僅是一次。爲此,您需要在服務中實現某種事件監聽器,即服務必須存儲回調並在發生某些更改時調用它。

例如,在您的服務:

// first add a method to register listeners 
var changeListeners = []; 
function addChangeListener (callback) { 
    changeListeners.push(callback); 
} 

// then call the listeners when change (event) happens: 
function setSportData(data) { 

    // ... your process 

    // notify listeners 
    changeListeners.forEach(function(callback) { 
     callback(data); 
    }); 
} 

而且,初始化控制器2時,你會註冊監聽器是這樣的:

service.addChangeListener(function(subSportsData) { 
    $scope.populateTable(subSportsData); 
}); 
相關問題