2013-11-02 63 views
11

我有以下控制器:我如何將範圍從控制器傳遞到angularjs中的服務?

'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-模型,在我看來,所謂的坐向ng-model="symbol_wanted"以下服務...

'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} 
     }); 
    }]); 

如何連接控制器的範圍被傳入服務?謝謝!

+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...

您可以調用服務,並通過參數是這樣的:

.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; 
}]); 

所以我們稱這種服務,並得到一個承諾背這樣的:

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

BTW,我建議您使用$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); 
} 

你可以使用scoped屬性。

+0

我這樣做,我得到錯誤:$範圍沒有定義。我如何訪問控制器中的$ scope.symbol_wanted? –

+0

在上例中,您已經在控制器中使用了'$ scope'。我的例子也打算進入控制器。 –

+0

您將不得不添加您的html標記,以便我們可以看到如何定義'ng-model'。 –

相關問題