2014-08-31 39 views
0

當我點擊/scheduleE路由時,我有一個節點服務器向客戶端發送一個csv文件。在我的控制器中,我點擊了這條路線並更新了範圍。我希望頁面上的作用域更新。加載csv文件與d3後範圍不更新

app.controller('ETableCtrl', function($scope){ 

    $scope.payments = [] 
    $scope.$watch('payments', function(){ 
     console.log('value changed!') 
    }) 

    d3.csv('/scheduleE', processData('01/01/14'), function(payments){ 
     $scope.payments = payments; 
     console.log($scope.payments); 
    }) 
}) 

在視圖$scope.payments住宿和空數組和「價值變了!」一開始只記錄一次。 $scope.watch("payments")在視圖中不更新。它仍然是一個空陣列。

但是,代碼將對象數組註銷到控制檯。爲什麼我的示波器不能在視圖中更新?

回答

1

回調發生在Angular應用程序的範圍之外。更新$ scope.payments後,請嘗試撥打$scope.$apply();

有更好的方法來做到這一點,但你至少可以證實這個問題。

+0

作品!我已經嘗試了'$ scope。$ broadcast()'和$ scope。$ emit(),但$ apply()是正確的一個 – 2014-08-31 05:44:45

+1

更一般地說,任何時候某些東西在d3回調中運行(屬性計算函數,.on )回調等),並觸及Angular範圍,你會想把它包裝在$ scope中。$ apply(function(s){在範圍的'這裏做東西')。 – 2014-09-01 07:46:20