2014-12-02 38 views
0

後在$ http.post()調用的成功()回調,我試圖更新HTML表:AngularJS與MVC,表不會刷新HTTP POST

.success(function (data) { 
      $scope.categories.push(data); 
     }); 

HTML:

<tbody> 
    <tr ng-repeat="category in categories"> 
    <td>{{category.Id}}</td> 
    <td>{{category.CategoryTypeID}}</td> 
    <td>{{category.IsContentLibraryItem}}</td> 
    <td>{{category.Title}}</td> 
    <td>{{category.CreatedBy}}</td> 
    <td>{{category.CreatedDate}}</td> 
    </tr> 
    </tbody> 

但是,結果是表格底部的空行,我相信這是因爲success()函數在post()函數完成之前執行。在成功()將新的(空)行推送到HTML表之前,新數據沒有完成寫入。

我需要一些延遲$scope.categories.push(data);行的方法,直到post()真正完成。我似乎回想起用jQuery/Ajax有一個onComplete()事件或類似的東西,但在AngularJS中有沒有相同的東西?

+0

如果您注入'$ window'並執行「$ window.alert(」獲取新數據「),則會發生什麼情況? – vidalsasoon 2014-12-02 18:19:05

+0

它的行爲與沒有$ window時的行爲相同 - 彈出警報,但Firebug控制檯顯示一個inprog/$ digest錯誤 – JMax2012 2014-12-02 18:29:42

+0

.success()僅在promise成功完成時被調用,在你的成功函數調用中嘗試console.log(data),它可能真的是空的,如果你提供了更多的代碼,我可以幫助更多 – UnbrandedTech 2014-12-02 20:26:35

回答

0

我認爲這更像是一個設計問題,因爲看起來你的控制器試圖表現得像服務一樣。 如果它們是服務,它們可以被注入,以便控制器更容易管理他們返回的數據。

+0

那麼,我是AngularJS的全新產品,這是我第一次嘗試縫合從各種代碼樣本中一起計算,所以如果您知道比我使用的更好的構造,那麼我就是全部耳朵。雖然,似乎執行http post()後跟get()刷新數據應該非常簡單。 – JMax2012 2014-12-02 18:33:30

+0

我認爲這裏的討論適用於你的問題:http://stackoverflow.com/questions/21919962/angular-share-data-between-controllers – vidalsasoon 2014-12-02 19:23:06

+0

這是一個計時問題。我需要更新這個問題來反映這一點。 – JMax2012 2014-12-02 19:51:56