在 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(),但我个人喜欢回调语法,因为它更容易理解您使用它的原因。
我对 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(),但我个人喜欢回调语法,因为它更容易理解您使用它的原因。