2015-10-06 2 views
0

У меня хорошее знание угловых, но я больше программист R, и поэтому я экспериментирую с библиотекой OpenCPU js.

Я не могу понять, почему я не могу назначить вывод простого запроса API для открытого сервера OpenCPU, функции rnorm (n = 2), в угловую область $. Что меня озадачивает, так это то, что я могу использовать jquery для назначения возвращенного json через ID, например.

Из того, что я понимаю, лучше не смешивать jquery в угловой контроллер. Я прав, думая об этом?

Работа с Jquery

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

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

не работает $ прицела

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

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

ответ

3

Поскольку вы используете неугольный инструмент, вы назначаете $ scope.normalValues ​​вне цикла углового дайджеста. Используйте $ scope.apply(), чтобы исправить это:

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

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

Вы также можете просто позвонить $ объем $ применить() сразу после того, вы установите значение области, но я лично, как синтаксис обратного вызова, так как это делает его легче. чтобы понять, почему вы его используете.

+0

Спасибо @Bas. Именно то, что я искал. – amwill04

+0

Мое удовольствие. Пожалуйста, не забывайте поднимать и отмечать как ответ;) –

1

Я предполагаю, что это потому, что ваша функция не вызывает $digest цикла - так что вы должны были бы заставить один с $timeout

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

$ timeout это неправильная вещь для использования здесь. Он работает, но на самом деле это $ scope.apply внутри таймаута $, что делает это так, что вы можете (и должны) использовать это вместо этого. Это более описательно. –

+0

@BasSlagter - '$ apply()' на самом деле не то, что вы хотите - это может вызвать проблемы, если вы попытаетесь использовать его mid digest - '$ timeout' - безопасный способ сделать это. – tymeJV

+0

Какие проблемы вы имеете в виду? Это не должно вызывать проблемы, если что-то еще в вашем коде не является ужасно неправильным (что может произойти, если вы часто используете такой тайм-аут) –

Смежные вопросы