在OpenCPU中使用AngularJS $scope



我对angularjs有一定的了解,但我更像一个R程序员,因此我正在尝试使用OpenCPU js库。

有一件事我不能得到我的头是为什么我不能分配从一个简单的API请求的输出到公共OpenCPU服务器,rnorm(n = 2)函数,到一个角$范围。让我困惑的是,我可以使用jquery通过ID分配返回的json。

根据我的理解,最好不要将jquery混合到angular控制器中。我这样想对吗?

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)});
})

因为你正在使用一个非角度的工具,你正在分配$scope。在Angular摘要循环之外的normalValues。使用$scope.apply()来修复这个问题:

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

你也可以只调用$scope.$apply()后,你设置你的范围值,但我个人喜欢回调语法,因为它使它更容易看到你为什么使用它。

我猜这是因为你的函数从未触发$digest循环-所以你必须强制一个$timeout

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

最新更新