首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将json添加到AngularJS中的作用域

将json添加到AngularJS中的作用域
EN

Stack Overflow用户
提问于 2016-11-13 12:06:56
回答 1查看 124关注 0票数 0

我在json中连接两个对象,并将其赋值给angularjs中的$scope。但不能做同样的事情。代码如下所示

代码语言:javascript
复制
//https://wind-bow.hyperdev.space/twitch-api/channels/ESL_SC2

/*Global Variable*/
var responseData=[];
var responseDataValues=[];
var twitch = angular.module("twitch",[]);

twitch.controller("listStremers",streamMe);

function streamMe($scope,$http)
{
  var streamers=["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas","comster404","brunofin"];

  for(var i=0;i<streamers.length;i++)
    {
      $http({
        method:"jsonp",
        url:"https://wind-bow.hyperdev.space/twitch-api/streams/"+streamers[i],
        params:{ 
            format: 'json',
            callback: 'fitData'
        }
      });
      $http({
        method:"jsonp",
        url:"https://wind-bow.hyperdev.space/twitch-api/channels/"+streamers[i],
        params:{ 
            format: 'json',
            callback: 'fitDataValues'
        }
      });
    }
 $scope.twitchData=makeJson(responseDataValues,responseData);
  $scope.filStatus={};
  $scope.clear=function(){
    $scope.filStatus={};
    console.log($scope);
  }
}

function fitData(response)
  {

    responseData.push(response);
  }
function fitDataValues(response)
{
  console.log(response);
  responseDataValues.push(response);
}

function makeJson(arr1,arr2)
{

  for(var i=0;i<arr1.length;i++)
    {

      arr1[i].stream=arr2[2].stream;
      if(arr1[i].stream==null&&arr1[i].status==404)
      {
        arr1[i].liveStatus="offline";
      }
      else if(arr1[i].status==404)
      {
        arr1[i].liveStatus="dead";
      }
      else
      {
        arr1[i].liveStatus="online";
      }
      //console.log(arr1[i]);
      //console.log(arr2[i]);
    }
  //console.log(arr1);
  return arr1;
}

在上面的makeJson函数代码中,我必须在arr1i对象中创建一个新的liveStatus,流属性并为其赋值,但是代码执行时没有任何问题,但是没有赋值给arr1,同样的赋值给控制器中的$scope。我是AJ和javascript的新手,请帮助

EN

回答 1

Stack Overflow用户

发布于 2016-11-13 14:06:42

这个问题是因为你正在连接的数据是来自http调用的,这是异步的,在你的数据通过http调用来之前

代码语言:javascript
复制
 $scope.twitchData=makeJson(responseDataValues,responseData);

两个空数组都被执行了。您可以通过promise resole或通过一种简单的方式在您的代码中进行以下更改:

代码语言:javascript
复制
function fitData(response)
{
    responseData.push(response);
    if(responseDataValues.length){
        $scope.twitchData=makeJson(responseDataValues,responseData);
    }
}
function fitDataValues(response)
{
   console.log(response);
   responseDataValues.push(response);
    if(responseData.length){
        $scope.twitchData=makeJson(responseDataValues,responseData);
    }
}

http调用花费的时间越长,将调用两个数组都具有值的函数调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40570457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档