2015-07-03 58 views
1

我有以下代碼角度爲每個封閉範圍可變

$scope.getBooksByUser = function (user) { 
    var books = []; 
    ProductFactory.getBooks.query({ id: user.id }).$promise.then(function (result) { 
     angular.forEach(result, function(i) { 
      books.push(i.name); 
      debugger; 
     }) 
    }); 
}; 

正如你所看到的,我試圖填補一個簡單的JavaScript陣列角度爲每個。當執行此功能時,數組books仍爲空。

我有點困惑這種行爲,因爲當我嘗試調試我的代碼,我可以看到,每次迭代值設置在數組中。其實鉻調試器顯示我陣列在closure scope,我想這是一個原因,但我仍然無法找到一個解釋,我怎麼能解決它。

其實如果我使用$scope.books = []它會工作正常,但我不需要$scope,但我只需要一個JavaScript數組。

在此先感謝。

+0

您可能需要張貼代碼爲貴「ProductFactory」,因爲它可能是你的工廠可能有錯誤,但代碼的小片段你提供的可能不足以診斷你的問題。 – Jesse

+0

您正在將'i.name'推入'users'數組而不是'books'數組。這就是爲什麼它是空的。 – AWolf

+0

傑西,不,它工作正常,我知道它,因爲我說如果我會使用$範圍變量它會很好 – user3127896

回答

0

我想這是因爲asynchronous發生AJAX的致電。在你的情況下,編譯器不會等待你的ajax響應。你應該做到像

ProductFactory.getBooks.query({ id: user.id }).$promise.success(function (result) { 
     angular.forEach(result, function(i) { 
      books.push(i.name); 
      debugger; 
     }) 
    }); 

希望它可以幫助:-)

+0

Vineet,謝謝你,但它根本不起作用。在控制檯中出現錯誤 - 'TypeError:undefined不是函數'指向成功函數 – user3127896