Как я могу передать область от контроллера до обслуживания в 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}
      });
    }]);

Как подключить область контроллера для передачи в службу? спасибо!

Ответ 1

как я могу передать область от контроллера до обслуживания в angularjs?

Вы не можете вводить $scope в сервисы, нет такой вещи, как Singleton $scope.

Я хочу передать связанную ng-модель, которая сидит в моем представлении под названием ng-model = "symbol_wanted" к следующей службе...

Вы можете вызвать службу и передать параметры следующим образом:

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

Кстати, я предлагаю вам использовать $http.get:

Демо Fiddle

Ответ 2

Ваше значение ng-model автоматически станет свойством scope. Таким образом, вы можете просто использовать это в своем контроллере для получения текущего значения:

$scope.symbol_wanted;

Итак, скажем, что у вас есть функция для обработки щелчка на контроллере:

$scope.handleMyClick = function() {

    stockData.query($scope.symbol_wanted);
}

Вы можете просто использовать свойство scoped.