在 OpenCPU 中使用 AngularJS $scope

Using AngularJS $scope within OpenCPU

我对 angularjs 有很好的了解,但我更像是一名 R 程序员,因此我一直在试验 OpenCPU js 库。

我无法理解的一件事是为什么我不能将一个简单的 API 请求的输出分配给 public OpenCPU 服务器,rnorm(n = 2) 函数, 到 angular $范围。让我感到困惑的是,我可以使用 jquery 通过 ID 分配返回的 json。

据我了解,最好不要将 jquery 混入 angular 控制器中。我这样想对吗?

与Jquery

合作
app.controller('rCtrl', function($scope){

  req = ocpu.rpc('rnorm',{
    n : 2
  }, function(output){$('#output').text(output)});
})

不工作 $scope

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

  req = ocpu.rpc('rnorm',{
    n : 2
  }, function(output){$scope.normalValues = output)});
})

我猜这是因为你的函数永远不会触发 $digest 循环 - 所以你必须用 $timeout

强制执行一个
app.controller('rCtrl', function($scope, $timeout){
    req = ocpu.rpc('rnorm',{
        n : 2
    }, function(output){
        $timeout(function() { $scope.normalValues = output })
    })  
})

由于您使用的是非 angular 工具,因此您在 Angular 摘要循环之外分配了 $scope.normalValues。使用 $scope.apply() 来解决这个问题:

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

  req = ocpu.rpc('rnorm',{
    n : 2
  }, function(output){
     $scope.$apply(function(){
         $scope.normalValues = output;
     });
  )});
});

您也可以在设置范围值后立即调用 $scope.$apply(),但我个人喜欢回调语法,因为它更容易理解您使用它的原因。