javascript - 如何在 AngularJs 中将参数从 Controller 传递到服务

标签 javascript angularjs openweathermap

我目前正在开发一个项目来帮助我更好地理解 angularjs!我目前陷入如何将参数从 Controller 传递到服务的困境。

在我的程序中,当用户输入内容并单击按钮时,我创建了一个名为“GetForecastByLocation”的函数。从那里我想获取他们的输入,然后将其传递给 service.js 中的 http 调用。

最初,$http.get 位于 API url 的一个长字符串中,但我用 google 搜索了一下,似乎我应该在尝试更改字符串的一部分时使用参数。截至目前,我知道参数被硬编码到特定城市,但我想获取新输入并将 vm.city 的值传递给 $http.get 调用。

如果有人可以提供帮助,我将不胜感激。谢谢你!

Controller .js

    var app = angular.module('weatherApp.controllers', [])
    app.controller('weatherCtrl', ['$scope','Data',
        function($scope, Data) {

        $scope.getForecastByLocation = function(myName) {
            $scope.city = myName;
            Data.getApps($scope.city);},

        Data.getApps(city)
        .then(function(data)){
        //doing a bunch of things like converting units, etc
        },
        function(res){
            if(res.status === 500) {
            // server error, alert user somehow
        } else { 
            // probably deal with these errors differently
        }
        }); // end of function
}]) // end of controller 

service.js

.factory('Data', function($http, $q) {
       var data = [],
           lastRequestFailed = true,
           promise;
       return {
          getApps: function() {
             if(!promise || lastRequestFailed) {
            promise = $http.get('http://api.openweathermap.org/data/2.5/weather?',{
              params: {
                q: Tokyo,
              }
            })
            .then(function(res) {
                lastRequestFailed = false;
                data = res.data;
                return data;
            }, function(res) {
                return $q.reject(res);
            });
         }
         return promise;
      }
   }
});

最佳答案

将参数传递给工厂方法与将参数传递给普通的旧函数没有什么不同。

首先,设置 getApps 来接受参数:

.factory('Data', function($http, $q){
    // ...
    return {
        getApps: function(city){
            promise = $http.get(URL, {
                params: {q: city}
            }).then( /* ... */ );
            // ...
            return promise;
        }
    };
});

然后将你的论点传递给它:

$scope.getForecastByLocation = function(myName) {
    $scope.city = myName;
    Data.getApps($scope.city);
}

关于javascript - 如何在 AngularJs 中将参数从 Controller 传递到服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44893476/

相关文章:

javascript - angularjs 使用 array.push 引用同一对象向 2 个下拉列表添加选项

JavaScript 函数引用深度限制

javascript - 检查模式内的所有复选框功能

javascript - react : update one item in a list without recreating all items

javascript - Angularjs jQuery 数据表添加处理事件

javascript - Openweathermap API 调用响应错误的 json

ios - 如何在我的 Swift 应用程序的其他地方使用 locationManager 函数的经度和纬度值

javascript - openweathermap api 在 IE11 中不工作

javascript - Ember加载模板多次出错

javascript - mootools: $ 未定义