2016-04-16 12 views
1

サービスを使用してコントローラのデータを更新できません。私は私のサービスでhttp.getを行い、データに対して何らかの処理を行い、そしてコントローラの$スコープを更新したいと思います。 私は以下のような角度サービスを持っています。私がフォーラムで読んだ回答から、自分のデータがビューで更新されるはずです。しかし、それは起こっていない。

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) 'の直前にオブジェクトに何かがありますか?もしそうなら、あなたの 'myService'' this.cleanData'メソッドの中の最初の行として' console.log(response) 'をどうでしょうか?オブジェクトにはまだものがあります。 – Lex

+0

@ sachinは動作していません。それは私のために働いているhttp://plnkr.co/edit/TRpa9540r8TPcMJeYhwY?p=previewをチェックしてください。 – sreeramu

答えて

0

myServiceサービスを再度呼び出して、応答を取得した後にsr $ scopeを設定しているようです。代わりに、$ 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

残念ですが、これはうまくいきます。私は電話をかける間違いをしました。したがって、正しいデータを与えない。あなたの助けをありがとう:)

関連する問題