0

私の奉仕の中で私はいくつかの特性を持っているという状況があります。これらのプロパティはコントローラにリンクされています。角度コントローラがサービスからの更新を読み取ることができません。何かアドバイス?

サービス:

angular.module('...') 
    .factory('PollServ', function PollServ($http, ...) { 

     var service = { 
      question: '', 
      votes: [[]] 
     } 

     ... 

     // make http request to API 
     var request = $http({ ... 

     // once the value is retrieved, update properties 
     request.then(function (res) { 

      service.question = res.data.question; 
      ... 
    } 

はコントローラー:投票が適切に更新されているが、今

angular.module('...') 
    .controller('PollCtrl', function PollCtrl(..., PollServ) { 
     $scope.question = PollServ.question; 
     $scope.votes = PollServ.votes; 
     ... 

、質問はありません。 votesが配列であり、questionが単なる通常の文字列であるという点を除いて、私は何もしません。私は、配列は動的に更新できることとは関係がありますが、単純な文字列ではないと考えています。

文字列を不要にすることなく、どのように動作させることができますか?

+1

'$ scope.question = PollServ.question;のサービス – Laazo

+0

から' request'メソッドを呼び出したことがないので、サービスを変更すると更新されません。文字列の値を代入しています - これをオブジェクトにラップするか、この値の変更を通知するために 'watch'を使う必要があります。良いアプローチは、あなたのすべての値を 'model'オブジェクトにラップすることです。そして、角は内部のプロパティの使用が更新をトリガーすることを確認します。 –

+0

@OvidiuDolhaああ、それは本当に面白いです。ありがとう、私はそれを試してみましょう。 – Grateful

答えて

0

あなた自身が言った - 質問はstringであり、コントローラ/ビューでは更新されません。

あなたができることは、質問をオブジェクトに変換することです。たとえば:工場で

var service = { 
    question: { 
     name: '' 
    }, 
    votes: [[]] 
} 

... 

service.question.name = res.data.question; 

その後、question.nameにあなたのビュー内の参照を変更する必要があります。

+0

ありがとうございます...しかし、@OvidiuDolhaによるアプローチを試してみると、すべてのプロパティがモデルプロパティ内にあります。それはうまくいくはずですか? – Grateful

+0

これは基本的に同じアプローチです - あなたは別の場所でラッピングを行います。そう、はい、それは動作するはずです。 –

関連する問題