javascript - AngularJs json URL 转换器

标签 javascript json angularjs url

出于练习的原因,我正在 Angular 中开发一些大型简单的天气应用程序,但我被卡住了..

我有一个像这样的 Angular json 提要:

app.factory('forecast', ['$http', function($http) { 
return $http.get('http://api.openweathermap.org/data/2.5/weather?q=Amsterdam,NL&lang=NL_nl&units=metric') 
        .success(function(data) { 
          return data; 
        }) 
        .error(function(err) { 
          return err; 
        }); 
}]);

并将提要加载到 index.html 中。它一切正常,我现在想要的是索引上的输入表单,它更改了 js/services/forcast.js 上 url 的 Amsterdam 部分,其中上面的代码指向另一个城市,以便人们可以看到他们的城市天气。

在此处查看演示:http://dev.bigstoef.nl/workspace/shiva/weer/index.html

我现在已经尝试了所有可能的选项,但我又过了 3 天,但还是不行。这里有什么正确的做法?

最佳答案

首先,创建一个“可配置的”服务:

app.factory('forecast', ['$http', function($http) { 
    var city;
    var cities = {
        amsterdam: 'Amsterdam,NL',
        paris: 'Paris,FR'
    };
    var api_base_url = 'http://api.openweathermap.org/data/2.5/weather';
    var other_params = 'lang=NL_nl&units=metric';

    return {
        setCity: function(cityName){
            city = cityName ;
            console.log(city);
        },
        getWeather: function(cityName){
          console.log(city);
            if(cityName) this.setCity(cityName);
            if (!city) throw new Error('City is not defined');
            return $http.get(getURI());
        }
    }

    function getURI(){
        return api_base_url + '?' + cities[city] + '&' + other_params;
    }
}]);

然后你可以像下面这样创建一个 Controller :

app.controller('forecastCtrl', ['$scope', 'forecast',function($scope,forecast){

$scope.city = 'amsterdam' ;

    $scope.$watch('city',function(){
      console.log($scope.city);
      forecast.setCity($scope.city);
    });

$scope.getWeather = function(){
  console.log('get weather');
    forecast.getWeather()
    .success(function(data){
    console.log('success',data);
    $scope.weatherData = data;
    }).error(function(err){
      console.log('error',err);
      $scope.weatherError = err; 
    });    
}; 
}]);

实现如下模板

<link rel="stylesheet" href="style.css" />

<div data-ng-controller="forecastCtrl">

  <form>

    <label>
      <input type="radio" name="city" data-ng-model="city" data-ng-value="'amsterdam'">Amsterdam
    </label>
    <br/>
    <label>
      <input type="radio" name="city" data-ng-model="city" data-ng-value="'paris'">Paris
    </label>
    <br/>

    <button data-ng-click="getWeather()">Get Weather</button>

  </form>  

  <p class="weather-data">
    {{weatherData}}
  </p>
  <p class="weather-error">
    {{weatherError}}
  </p>

</div>

<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src="script.js"></script>

您可以在此处查看代码:http://plnkr.co/edit/rN14M8GGX62J8JDUIOl8?p=preview

关于javascript - AngularJs json URL 转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30451709/

相关文章:

javascript - 如何在 AngularJS 中将消息从一个 Controller 发送到另一个 Controller ?

javascript - 我可以在javascript中使用大括号来分隔代码段吗

javascript - 表行排序和字符串性能

javascript - 如何根据传递的值从对象中查找键值

json - 使用 jq 从 JSON 数组中提取元素返回 "Cannot index array with string"

javascript - AngularJS 重复动态数组值

javascript - 解析元素标题中的html元素

javascript - backtotop.js 错误 : box is always visible in Firefox 29

javascript - 提交表单时未提交动态注入(inject)的表单字段

javascript - 寻找解析帮助