注意不要在阵列推送上调用

时间:2014-03-13 03:44:48

标签: javascript angularjs

我有一个PeerJS服务,它包含一系列活动流。设置WebRTC流时,会有一个在流可用时调用的回调

call.on('stream', function(stream){
    activeStreams.push(URL.createObjectURL(stream));
  });

当流可用时,我将其推送到activeStreams数组。然后我在我的控制器中观察这个数组值:

//PeerRTC is the service and .getActiveStreams returns the activeStreams array
$scope.$watch(PeerRTC.getActiveStreams, function(activeStreams) {
  $scope.activeStreams = activeStreams;
}, true);

但由于某些原因,当我将url(string)值推送到数组时,手表回调不会执行。

我忽略了什么吗?可能是因为activeStreams值在回调函数中发生了变化吗?

3 个答案:

答案 0 :(得分:1)

某些情况,例如异步调用,您需要调用$scope.apply()才能使其正常工作。在将push新数据发送到阵列后,请立即调用它。

答案 1 :(得分:0)

我一直使用watch变量作为表达式字符串:

$scope.$watch('PeerRTC.getActiveStreams', function(activeStreams) {
  $scope.activeStreams = activeStreams;
}, true);

doco

答案 2 :(得分:0)

什么是“PeerRTC.getActiveStreams”?

通过命名它看起来像一个函数,而不是一个数组。 (这是一个varb)。

如果它是一个获取数组的函数,则必须观察调用函数的结果,而不是函数本身。因为功能保持不变。

$scope.$watch('PeerRTC.getActiveStreams()', function(activeStreams) {
  $scope.activeStreams = activeStreams;
}, true);

还要确保数组在范围内。

相关问题