当前位置: 首页 > 面试题库 >

如何在angularjs中将范围从控制器传递到服务?

呼延烈
2023-03-14
问题内容

我有以下控制器:

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

如何连接控制器的作用域以传递到服务中?谢谢!


问题答案:

如何在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

演示小提琴



 类似资料:
  • 问题内容: 将“当前”传递给AngularJS服务是否正确? 我处于一种$ service的状态,知道它仅由一个控制器使用,并且我想在$ service方法本身中引用该控制器的作用域。 这在 哲学上是 正确的吗? 还是最好将事件广播到$ rootScope,然后让我的控制器侦听它们? 问题答案: 要让控制器知道何时发生异步,请使用Angular promises。 要触发,您不需要作用域,可以调用

  • 我尝试注入$scope,然后使用,但这不起作用? 有人能提供建议吗?

  • 问题内容: 我有类似的服务 我想从控制器做类似 getCurrentPosition可以正常工作,并且城市也已确定,但是我不知道如何在控制器中访问城市。 怎么了? 调用getCurrentCity时,它将调用getCurrentPosition来确定gps坐标。该坐标作为参数传递给onSuccess方法,对吗?因此,这与我要在getCurrentCity方法中执行的操作完全相同,但我不知道如何做。

  • 我是spring的新手,在spring3中创建了一个应用程序。0我正在使用注释spring。 我想从我的控制器方法返回列表到jsp。列表将显示在选择框中。以下是控制器和jsp部分的代码。请帮助我理解这一点。 和JSP 在模型中添加用户时,它工作正常,但是当我添加lookingfor属性时。model.add属性(“lookingfor”,lookingfor); 这是一个错误。 严重:Servle

  • 问题内容: 当使用AngularJS服务尝试在两个控制器之间传递数据时,我的第二个控制器在尝试从该服务访问数据时始终会收到未定义的信息。我猜这是因为第一个服务执行的是$ window.location.href,并且我认为这正在清除服务中的数据?我是否可以将URL更改为新位置,并将数据保留在第二个控制器的服务中?当我运行下面的代码时,第二个控制器中的警报始终未定义。 app.js(定义服务的位置)

  • 问题内容: 我的页面有多种形式,一次只想显示一个即可。为此,我将每种形式分成一个部分,并使用Bootstrap的手风琴插件一次只允许一个打开的部分。 我的标记看起来像这样: 一切正常,我可以在表单之间导航。 因为我不希望用户打开当前正在编辑的部分包含验证错误的部分,所以我尝试检查函数是否与其关联的表单有效。 我尝试过,但是我做不到。我无法访问负责页面的控制器中与表单关联的FormControlle