Javascript 如何在angularjs中将作用域从控制器传递到服务?

Javascript 如何在angularjs中将作用域从控制器传递到服务?,javascript,angularjs,Javascript,Angularjs,我有以下控制器: 'use strict'; /* Controllers */ angular.module('stocks.controllers', []). controller('MyCtrl1', ['$scope', '$http', 'stockData', function MyCtrl1 ($scope, $http, stockData) { $scope.submit = function() { $scope

我有以下控制器:

'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 model=“symbol\u wanted”
的绑定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
值将自动成为范围属性。因此,您可以在控制器中使用此选项来获取当前值:

$scope.symbol_wanted;
那么,假设您有一个函数来处理控制器中的单击:

$scope.handleMyClick = function() {

    stockData.query($scope.symbol_wanted);
}
您可以只使用作用域属性

如何在angularjs中将作用域从控制器传递到服务

您不能将$scope注入到服务中,不存在单例$scope

我想将位于我视图中名为ng model=“symbol\u want”的绑定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}
      });
    }]);
您可以通过以下方式调用服务并传递参数:

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

stockData.query(value)//什么时候?您是否定义了一个在
ng单击时调用的函数
?这个问题很奇怪,因为它假设您不能这样做:
myService($scope)
。其余的注释和答案显示了不同的
angularjs
模式,而不是回答标题中的问题。我这样做了,得到错误:$scope未定义。如何访问控制器中需要的$scope.symbol_?在上面的示例中,您已经在控制器中使用了
$scope
。我的示例也将进入控制器。您还必须添加html标记,以便我们可以看到
ng model
是如何定义的。我认为这并不能回答问题。我遗漏了什么吗?我这样做了,我得到了错误:$scope未定义。如何访问控制器或服务中所需的$scope.symbol_?在您的示例中,
$scope
是定义的。我实现了您的代码,它不会在控制台选项卡中发出警报或设置错误,但我看不到从ajax调用返回的任何数据。我还在控制器中的$resource旁边添加了$q。@Tamy通常有两种不同的功能,它基于您的目标。
$http
您可以配置
POST
GET
,它的工作原理与jQuery中的ajax请求类似。对于
$resource
,您可以根据我们传递的参数配置请求以获取特定数据。例如,如果在服务器端,我们有json对象,我不想得到完整的json,比如一个id=7的对象。所以我可以配置$resource来自动获取id为7的对象,而服务器端没有逻辑。