0

モーダルにフォームがあるページがあります。モーダルのフォームの準備ができたら、モーダルを閉じてページにメッセージを表示する必要があります。ページとモーダルは異なる責任を負うため、別々のコントローラーにしたいと思います。フォームの準備ができたことをページに通知する方法が 2 つあります。

  1. 両方のコントローラーが注入され、そのメソッドを呼び出すサービスを作成します
  2. モーダル コントローラーをページ コントローラーの子にして、オブジェクトを共有させます。 html

スコープに関する Angular のドキュメントには、コントローラーは変数を共有するのではなく、サービスを使用するべきだと書かれているようですが、この場合、それが本当に最善の方法でしょうか?

4

1 に答える 1

0

サービスを使用してコントローラーに関する情報を共有しますが、コントローラーをサービスに注入する代わりに、サービスをコントローラーに注入します。また、ビューとデータの間のバインディングを維持したい場合は、プリミティブ変数の代わりにオブジェクトを使用する必要があります。

angular.module("MyApp", [])
.factory("Data", function() {
  return { msg: "Shareable/Bindable data" }
})
.controller("One", function($scope, Data){
  $scope.foo = Data;
})
.controller("Two", function($scope, Data){
  $scope.bar = Data;
})

この例では、データをサービスのオブジェクトにラップするのではなく、データを直接返すことができました。ただし、それを行った場合 ( return "..."and $scope.foo = Data) 、変数{{foo}}or{{bar}}はファクトリ情報の「シャドウ」コピーのみを持つことになります。したがって、{{foo.msg}}ビューとメッセージ ラッピングで使用する必要があります。

完全な例はCodepen.ioにあります。を削除し、{ msg }代わりに文字列を返して、私が何を意味するかを確認してください。

于 2013-09-12T07:21:15.547 に答える