2

コントローラーに挿入されたサービスがあります。サービスは、いくつかの関数を定義します。

ここで、アプリケーションで selectedItem を保持する変数をそのサービスに追加したいと思います。私はこのようにしました:

angular.module('myservices', []).
factory('serviceA', function () {        

    var serviceA= {  
      selectedItem: selectedItem,      
      ... more functions here
    };
    return serviceA;

    var selectedItem;
    ... functions go here
});

コントローラーの 1 つで、選択したアイテムを設定します。

 serviceA.selectedItem = someItem;

別のコントローラーでは、ビューは次のように選択された項目を参照します。

<span>{{serviceA.selectedItem.value}}</span>

selectedItem が正しく設定されていても、スパンは更新されません。私は何を間違っていますか?

4

3 に答える 3

7

ビューでサービスにアクセスするには、それをスコープに割り当てる必要があります。

$scope.serviceA = serviceA;

http://jsfiddle.net/MzJsZ/

于 2013-08-28T08:26:51.480 に答える
1
angular.module('myservices', []).factory('serviceA', function () {        
  return {

//// ファクトリがオブジェクトを返す

     var serviceA= {  
      selectedItem: selectedItem,      
      ... more functions here
    };
    return serviceA;

    var selectedItem;
    ... functions go here

}

});

これは機能しますか?すべてがそこにある return{} 部分がありませんでした。サービスを使用する場合は、this.serviceA={...} だけを記述します。

コントローラーのコードに $scope がありません!

$scope.someItem= serviceA.selectedItem; 

または(私はあなたが何を望んでいるのか本当にわかりません)$scope.serviceA.selectedItem= someItem;

その後、あなたのスパンで

<span>{{someItem.value}}</span>

または(私はあなたが何を望んでいるのか本当にわかりません)<span>{{serviceA.selectedItem.value}}</span>

PS コントローラーの名前がオブジェクトの serviceA と同じであることは気に入りません。

于 2013-08-28T08:10:33.120 に答える