2016-11-15 5 views
0

私のサービスを使ってあるコントローラーから他のコントローラーにデータを渡そうとしているときに問題が発生しています。同じイベントで、あるコントローラーのデータをサービスに渡し、そのコントローラーのデータにアクセスする方法はありますか?

コントローラの$rootScopeを使用してプロトタイプ継承を実装し、そのオブジェクトをブロードキャストして、他のコントローラのデータにアクセスできるようにしました。

私は$rootScopeを使用していますが、私はグローバルな名前空間を汚染しています。私はこのコントローラから他のコントローラにデータを渡したいと思います。

私はテーブル内の最小限のデータを表示しています。ユーザーがテーブルの特定のレコードをクリックすると、オブジェクト全体のデータが表示されます。

これは私が処理する方法です。コントローラーAでは

<tr ng-repeat="contact in filterContacts = (contacts.contactsData | filter:sensitiveSearch | orderBy:selectBox) " ng-style="{'background-color': contact.email == selectedContact.email ? 'lightgrey' : ''}" ng-click="selectContact(contact)">

:私は、ビューからこの関数を呼び出すと、特定の行の連絡先の詳細を注入しています。私はちょうどそのデータを返すよサービスで

$scope.selectContact = function(contact) { 
       contactService.selectedContactInfo(contact); 
      }; 

-

var selectedContactInfo = function(contact) { 
      return contact; 
     }; 

は、どのように私は、同じイベント中にコントローラーBでこのデータにアクセスし、自分のビューに表示することができます。

Here is the reference Link: http://plnkr.co/edit/beOmiv?p=info 

私は$rootScopeを使用する必要はありませんが、私は他のコントローラにデータにアクセスしたいと思います。

+0

どの角度バージョンを使用していますか? – davidxxx

+0

私は角を使用しています。1.4.9 –

+0

あなたの必要性に対処できる完全な例があります:http://stackoverflow.com/questions/21919962/share-data-between-angularjs-controllers – davidxxx

答えて

2

これに角度サービスを使用できます。

アングルサービスはシングルトンであり、2つの異なるコントローラに同じサービスを注入できるように、それらをコントローラに挿入するので、それらの間に効果的に状態を渡します。

サービスにselectedUserIDと呼ばれるプロパティがあるとします。このプロパティは、特定の行をクリックすると更新されます。次のコントローラでは、同じサービスを注入し、このプロパティを使用してロードする詳細を決定します。

あなたはこのようになりますあなたのサービス内の方法かもしれないので:

updateSelectedUser = function(userID) { 
    this.selectedUserID = userID; 
} 

をクリックアクションが発生したときにあなたのコントローラは、サービスからこのメソッドを呼び出します。

myService.updateSelectedUser($scope.selectedUserID); 

これは、ちょうど例ですが、そこにあなた自身の価値を入れてください。

サービスは状態を保持することができますが、結局はオブジェクトでありシングルトンなので、常に同じインスタンスを挿入します。

サービス内に格納されている状態が、このサービスを経由しない外部の操作によって変更されていないことを確認することは理にかなっています。言い換えれば、このselectedUserIDを変更するものがほかにないので、サービス状態データが決して同期しなくなることはありません。あなたがこれを行うことができれば、あなたは金色です。

+0

しかし私の質問は、コントローラ間で単一のイベントでデータにアクセスする方法です。 ng-clickでコントローラAからサービスにデータを送信していますが、コントローラBからデータを取得するイベントがないので、どのように処理する必要がありますか? –

関連する問題