2015-09-02 61 views
3

我是angularjs的初學者,對不起,如果我問傻問題。

function getCams(callback){ 
    var media_list = []; 
    MediaStreamTrack.getSources(function(sourceInfos){ 
    var i=0; 
    while(i!=sourceInfos.length){ 
     if (sourceInfos[i].kind == 'video'){ 
     var temp = []; 
     temp.push(sourceInfos[i].id); 
     temp.push(sourceInfos[i].label); 
     media_list.push(temp); 
     } 
     i++; 
    } 
    callback(media_list); 
    }); 
} 
var app = angular.module('myApp', []).config(function($interpolateProvider){ 
    $interpolateProvider.startSymbol('{[{').endSymbol('}]}'); 
}); 
app.controller('myCtrl', function($scope, $interval) { 
    $scope.cams = []; 
    var checkcams = getCams(function(media_list){ 
    $scope.cams=media_list; 
    $scope.$apply(); 
    console.log("test"); 
    }); 
    $interval(checkcams, 10000); 
}); 

以上是從那裏我試圖讓連接到系統的凸輪數,並試圖更新使用回調函數的角度JS一樣,在這一行

$interval(checkcams, 10000); 

代碼我試圖每隔10秒調用一次該函數,但這個函數在頁面加載後只運行一次,並且在每10秒後不運行。

我已經看過這個問題了,它不會幫助我。 $interval not running, angularjs

+0

'getCams'不返回任何東西,在'$ interval'不工作。這是預期的行爲。 – Satpal

+0

那麼,如何以適當的方式重寫這段代碼來完美地更新角度js範圍呢? –

回答

1

getCams沒有返回,因此$interval不起作用。這是預期的行爲。

您可以重寫代碼爲

//Wrap getCams call in a function 
var checkcams = function(){ 
    getCams(function(media_list){ 
     $scope.cams=media_list; 
     $scope.$apply(); 
     console.log("test"); 
    }); 
} 

//Call it when view is launched 
checkcams(); 

//set Interval 
$interval(checkcams, 10000); 
+0

所以,在這段代碼中只有一條線是不同的,這條線在這裏做了什麼? checkcams();我想知道背後的概念。 –

+0

@SheeshMohsin,只有一行沒有區別,我在函數中封裝了'getCams'函數調用,然後將該函數的參考傳遞給interval。閱讀我的內嵌評論 – Satpal

+0

是的,明白了,讓我試試 –

0

通過這樣做

var checkcams = getCams(function(media_list){ 
$scope.cams=media_list; 
$scope.$apply(); 
console.log("test"); 

});

您已將checkcams設置爲getCams返回的變量,而不是函數。

試試這個

function checkcams() { 
    getCams(function(media_list){ 
     $scope.cams=media_list; 
     $scope.$apply(); 
     console.log("test"); 
    }); 
} 
$interval(checkcams, 10000);