4

AngularJS コントローラー間でデータを共有しようとしています。また、httpリクエストを介してデータを取得します。コントローラーからデータにアクセスすると、null になり、後で (UI を介して手動で更新した場合)、データが利用可能になります。問題はここと非常に似ていると思います が、私の場合は何を試してもうまくいきませんでした。フィドルを見てください

http://plnkr.co/edit/6SkzXK?p=preview

そのため、コントローラーでデータを取得します

//myService.setName(); //commented as it breaks the code

サービスとアクセスの価値を設定しますgetName()

$rootScope.$apply上記のリンクのように、を介して解決できる可能性が最も高いですが、機能させることができませんでした。

4

2 に答える 2

16

問題は、コントローラが初期化されるときに getName() の結果を variable にコピーすることです$scope.name = myService.getName()$scope.nameは参照ではなく文字列を保持しているため、変更されても更新されませんgetName()

これを解決するには 3 つの方法があります。

  1. 関数として作成$scope.name = myService.getNameして使用しますHello {{name()}}
  2. myService.getName()次のようなオブジェクトを返してビュー{ real_name: "foo" }で使用するname.real_name
  3. スコープにバインドし、関数とビューmyServiceを直接使用するgetName$scope.myService = myService;myService.getName()

私は最初のほうが好きです。与えられた方がより明確です。2 つ目は、より多くのデータがある場合に適しています。私の意見では、3番目は良い方法ではありません。

于 2012-09-19T20:45:59.980 に答える
0

プランカーを機能させるには、次の 3 つのことを行う必要があります。

  1. $http サービスを新しいサービスに挿入する
  2. ビューが呼び出している getName() 関数を定義します
  3. $scope を setName() 関数に渡し、$scope の値を変更します

http://plnkr.co/edit/6SkzXK

于 2012-09-19T21:17:19.413 に答える