2014-12-31 84 views
1

在Web工作者中訪問角度$範圍數據的常見做法是什麼?

我正在嘗試與parallel.js庫結合使用。

$scope.variant = 7; 
$scope.final = 0; 
var p = new Parallel([0, 1, 2, 3, 4, 5, 6]), 
log = function() { console.log(arguments); }; 

function fun(n) { 
    $scope.final += n * $scope.variant; 
}; 

p.map(fun).then(log) 

我收到以下錯誤:

Uncaught ReferenceError: $scope is not defined 

回答

0

網絡工作者生成一個新的線程,從而導致角應用程序的新實例,所以除非你發現代碼永遠不會連接到您的主應用程序一個與之通信的外部方式(sessionStorage,localStorage,cookies,API調用等)。但是你需要以某種方式傳遞你想要的$ scope。

但一般來說,我不認爲有兩個線程在同一個$範圍內工作是個好主意(即使您設法做到這一點)。網絡工作者通常用於某些重要的東西,這些東西是獨立於主應用程序的,並且其結果比傳回主應用程序以供進一步使用(考慮渲染超級複雜的圖像,然後將其傳遞迴主應用程序,以便您可以用它作爲背景或其他東西)。


UPDATE

所以這裏有可能是最簡單的方法簡單的例子。你不會在工人腳本採用了棱角分明,但環比這些文件以純越好:

控制器

var worker = new Worker('iterator.js'); 

worker.addEventListener('message', function(e) { 
    console.log('Worker said: ', e.data); 
    $scope.final = e.data; // for example 
    $scope.$apply();  // launch a digest cycle 
}, false); 

工人腳本

function iterate() { 
    // iteration and data collection stuff here 
    // send the needed data afterwards: 
    self.postMessage(collectedData); 
} 

您也可以將參數傳遞給並用參數調用迭代函數等。

我已將http://www.html5rocks.com/en/tutorials/workers/basics/的示例作爲指導,以便快速向您展示如何執行此操作。讓工作人員完成沉重的工作,並只將需要的數據傳回應用程序。

+0

我循環了50,000個文件,最終阻止了用戶界面。我試過異步庫,超時技巧,自定義迭代器,似乎無法獲得任何工作,我沒有阻止我的角度數據格式。 – egekhter

+0

我正在訪問這麼多文件的原因是我使用Chromium Embedded Framework來創建不受沙盒處理的桌面應用程序。 – egekhter

+0

最後你需要從這些文件中得到什麼? – Shomz