2013-11-02 12 views
11

私は、次のコントローラがあります。anglejsでコントローラからサービスにスコープを渡すにはどうすればよいですか?

'use strict'; 

    /* Controllers */ 

    angular.module('stocks.controllers', []). 
    controller('MyCtrl1', ['$scope', '$http', 'stockData', function MyCtrl1 ($scope, $http, stockData) { 

     $scope.submit = function() { 




     $scope.info = stockData.query(); 
     console.dir($scope.info); 
     } 

    }]); 

をし、私は私の見解で座っバウンドNG-モデルを渡したいが、私はどのように接続するのです

'use strict'; 

    /* Services */ 

    angular.module('stocks.services', ['ngResource']).factory('stockData', ['$resource', 
     function($resource){ 
     return $resource('http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22YHOO%22)%0A%09%09&env=http%3A%2F%2Fdatatables.org%2Falltables.env&format=json', {}, { 
     query: {method:'GET', isArray:false} 
     }); 
    }]); 
...次のサービスに ng-model="symbol_wanted"と呼ばれますコントローラがサービスに渡される範囲は?ありがとう!

+0

いつですか? 'ng-click'で呼び出される関数を定義しましたか? –

+0

質問はあなたが単に行うことができないと仮定しているので、奇妙です: 'myService($ scope)'。残りのコメントと答えは、タイトルで尋ねられるものに答えるのではなく、異なる「angularjs」パターンを表示しています。 –

答えて

13

how do i pass scope from controller to service in angularjs?

サービスに$ scopeを挿入することはできません.Singleton $ scopeのようなものはありません。

i want to pass a bound ng-model that sits in my view called ng-model="symbol_wanted" to the following service...

あなたはサービスを呼び出し、パラメータをこのように渡すことができます私は思います、ところで

stockData.query(value) // <-- pass value 
     .then(function (result) { 
     $scope.data = result;    
    }, function (result) { 
     alert("Error: No data returned"); 
    }); 

.factory('stockData', ['$resource', '$q', function ($resource, $q) { 

    var factory = { 
     query: function (value) { 

      // here you can play with 'value' 

      var data = $resource('http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22YHOO%22)%0A%09%09&env=http%3A%2F%2Fdatatables.org%2Falltables.env&format=json', {}, { 
       query: { 
        method: 'GET', 
        isArray: false 
       } 
      }); 
      var deferred = $q.defer(); 
      deferred.resolve(data); 
      return deferred.promise; 
     } 

    } 
    return factory; 
}]); 

は、だから我々はこのサービスを呼び出し、バックこのような約束を取得しますお勧めします$http.get

デモFiddle

+0

私はこれをして、エラー:$スコープが定義されていません。どのように$ scope.symbol_wantedにアクセスするのですか?コントローラまたはサービス内の –

+0

?あなたの例 '$ scope'が定義されています –

+0

私は自分のコードを実装していて、コンソールタブでエラーを警告したり設定したりしていませんが、ajax呼び出しから戻ってくるデータは表示されません。 –

4

ng-modelの値は自動的にスコーププロパティになります。だから、あなただけの現在の値を得るためにあなたのコントローラでこれを使用することができます。

$scope.symbol_wanted; 

それでは、あなたのコントローラでクリックを処理するための機能を持っているとしましょう:

$scope.handleMyClick = function() { 

    stockData.query($scope.symbol_wanted); 
} 

することができますだけスコープ付きプロパティを使用します。

+0

私はこれをして、エラー:$スコープが定義されていません。どのように$ scope.symbol_wantedにアクセスするのですか? –

+0

上記の例では、あなたのコントローラですでに '$ scope'を使用しています。私の例はコントローラーにも入っています。 –

+0

'ng-model'がどのように定義されているかを見るために、HTMLマークアップを追加する必要があります。 –

関連する問題