javascript - Angularjs,从工厂获取数据

标签 javascript html angularjs

我有一个工厂,我试图通过 $http 服务获取数据。

工厂:

(function(){
angular
.module('projectApp')
.factory('weatherfactory', weatherfactory);

weatherfactory.$inject=['$http'];

function weatherfactory($http){
var cities=[
  {name: "Łódź", link: "http://api.openweathermap.org/data/2.5/weather?q=Lodz,pl"},
  {name: "Warszawa", link: "http://api.openweathermap.org/data/2.5/weather?q=Warszawa,pl"}

];
var weat={};

var service={
  getCities: getCities,
  GetWeather: _GetWeather
};
return service;

function _GetWeather(link){
  $http.get(link).success(function(data){
    weat=data;
  });
  return weat;
}


function getCities(){
  return cities;
}

} })();

在 Controller 中,我从工厂调用函数:

function weatherData(city){
  sa.weather=weatherfactory.GetWeather(city);
  sa.show=true;
}

查看:

<div class="row">
    <div class="col-md-8">
      <select class="form-control" ng-model="sa.city">
        <option ng-repeat="city in sa.cities" value="{{city.link}}">{{city.name}}</option>
      </select>
    </div>
    <div class="col-md-4">
      <button class="btn btn-primary" ng-click="sa.weatherData(sa.city)">Wybierz</button>
    </div>
    <div ng-if="sa.show">
      {{sa.weather.name}}
    </div>
  </div>

它可以工作,但不正确。我必须单击按钮两次才能显示正确的数据。

最佳答案

当您发出任何服务器请求时,您必须等待,直到回调函数中提供可用响应。

在您的代码中,您将立即从函数 GetWeather 返回,因此 weat 第一次为空。当您第二次单击该按钮时,此时天气信息将可用,因此您可以查看天气信息。

您必须在代码中进行以下更改。

服务变更

function _GetWeather(link){
  return $http.get(link);
}

Controller 更改

function weatherData(city){
   weatherfactory.GetWeather(city).success(function (data) {
        sa.weather = data;
        sa.show = true;
   });
}

关于javascript - Angularjs,从工厂获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30652969/

相关文章:

javascript - 防止浏览器缓存上传图片

javascript - 如何使用单个 var 来表示多个值?

javascript - 按顺序显示所有 promise 的结果

javascript - 如何访问不同的 iframe?

html - 是否可以从给定位置开始以 HTML 格式显示枚举列表?

javascript - 在 Angular 中使用占位符

javascript - 隐藏URL参数并读取它们

javascript - 从 JSON 创建可下载的 pdf 文件

javascript - 我如何将项目添加到选定的追加列表 jquery

javascript - 在 React.js 中使用可选的 href 渲染 "a"