2016-04-16 3 views
1

Я не могу обновлять данные в своем контроллере с помощью службы. Я хочу сделать http.get в своей службе, выполнить некоторую обработку данных и затем обновить область $ scope контроллера. У меня есть угловое обслуживание, как показано ниже. Из ответов, которые я прочитал на форумах, мои данные должны обновляться в представлении. Но этого не происходит.

app.service('myService', function($http, $rootScope) { 
this.selected = { 
     item: '' 
} 
this.getData = function(key){ 
    return $http.get('/myapp/stocklist/'+key); 
} 
this.gs = []; 
this.sr = []; 
this.siri=[]; 
var vm=this; 

this.cleanData = function(response){ 
    for(var i=0; i<response.data.length; i++) { 
     vm.gs.push(response.data[i].name); 
     vm.sr.push(response.data[i].high); 
    }      
    vm.siri.push(vm.sr); 
} 
}); 

и вот контроллер. Переменные gs и sr являются пробелами. Из того, что я прочитал, мне не нужно использовать часы для этого, и приведенный ниже код должен работать (я не очень понимаю, как использовать часы). Если это будет работать с часами, можете ли вы рассказать мне, как это сделать.

app.controller('graph', ['$scope', '$http', 'myService', function($scope,$http, myService) { 
$scope.mySelected = myService.selected; 
console.log($scope.mySelected); 
myService.getData($scope.mySelected).then(function(response){ 
    myService.cleanData(response); 
    $scope.sr=myService.siri; 
    $scope.gs=myService.gs; 
    console.log(myService.sr); 
}); 
}]); 

Я новичок в угловом, а также, возможно, структурируя код в неправильном направлении. Я был бы признателен за любые предложения по дизайну.

Мне также интересно, правильно ли я использую службу для $ http.get. Я задал вопрос раньше на форуме, и это то, что я получил в ответ. Он работает, когда я использую возвращаемые данные из сервисной функции и выполняю обработку данных в самом контроллере. Не могли бы вы помочь?

+0

Пожалуйста, проверьте этот запрос http://stackoverflow.com/questions/36663503/invoke-one-controller-from-another/36663536?noredirect=1#comment60919252_36663536 – user3045179

+0

Если вы положили консоль .log (response) 'прямо перед вашим' myService.cleanData (response) 'есть что-нибудь в объекте? Если да, то как насчет 'console.log (response)' в качестве первой строки внутри метода 'myService' this.cleanData'? Все еще есть вещи в объекте. – Lex

+0

@sachin это не работает.? проверьте это http://plnkr.co/edit/TRpa9540r8TPcMJeYhwy?p=preview, это работает для меня. – sreeramu

ответ

0

Похоже, вы снова вызываете службу myService, чтобы задать область sr $ после получения ответа. Вместо этого задайте значения $ scope.sr и $ scope.gs соответственно response.siri и response.gs. Обновленный код ниже:

app.controller('graph', ['$scope', '$http', 'myService', function($scope,$http, myService) { 
$scope.mySelected = myService.selected; 
console.log($scope.mySelected); 

myService.getData($scope.mySelected).then(function(response){ 
    $scope.cleanData = response; 
    $scope.sr = response.siri; 
    $scope.gs = response.gs; 
    console.log($scope.sr); 
}); 
}]); 
0

Извините, все работает отлично. Я сделал ошибку, чтобы получить звонок. Следовательно, не дает правильных данных. Спасибо за помощь :)

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