AngularJS - 更新json信息

时间:2015-03-19 15:28:01

标签: json angularjs

首先对不起,如果之前有人问这个问题,但我找不到答案。另外,我对角度很新,所以如果这个问题看起来很愚蠢那么对不起。所以,继续开展业务。

我正在尝试构建一个AngularJS应用程序(现在)使用$ http来获取json, 在视图中显示信息,例如,当您按下按钮时,视图中的信息会发生变化。我设法得到$ http请求并显示它,但我不能为我的生活弄清楚如何操纵我得到的json数据。我尝试使用JSON.parse()和angular.toJSON之类的东西将数据存储在另一个变量中,但似乎都没有。我该怎么做呢?

这是我到目前为止的代码:



<body ng-controller="MessageController">

   <table>
     <thead><tr><th rowspan="4" scope="col">Studenti</th></tr></thead>
     <tbody>
     
      <tr>
        <td>Nume:</td>
        <td ng-repeat = "student in students">{{student.name}}</td>
      </tr>
      <tr>
        <td>Skill:</td>
        <td ng-repeat = "student in students">{{student.skill}}</td>
      </tr>
      <tr>
        <td>Oboseala:</td> 
        <td ng-repeat = "student in students">{{student.oboseala}}</td>
      </tr> 
      
     </tbody>     
  </table>
    
    <button ng-click="changePcStatus()">Turn on Computer</button>
    <p>Pc state: {{pcState}}</p>
    
    
  </body>
&#13;
&#13;
&#13;

和控制器:

&#13;
&#13;
var nameSpace = angular.module('myApp.controllers', []);

nameSpace.controller('MessageController', [ '$scope', '$http', function($scope, $http)
{                                     
  
  
    $http.get('js/data.json').success(function(data){
      $scope.students = data;
    }).error(function(data, status, headers, config) {                                
      alert("error");
                                                      
    });
      
  var pcStatus = false;
  var counter = 0;
  $scope.pcState = "Off"
  
    $scope.changePcStatus = function(){
    
      if(counter === 0){
    $scope.pcState = "On";
    pcStatus = true;
      counter++;
        
    } else {
    alert("The pc was already turned on once!");
    };
    
      
    }; 
  
  
      }]);
&#13;
&#13;
&#13;

基本上,我想要做的是,当我按下&#34;打开电脑&#34;按钮,&#34;技能&#34;关闭每个学生应该上升几点,这应该反映在视图中。

编辑:这似乎有效。非常感谢你。 @Cerad说如果我在data.json中有更多信息,我将不得不改变声明。怎么会这样? (我还有更多)。看来$ scope.students只能在.success中加入。如果我尝试在.success函数之外使用它,它只会破坏应用程序($ scope.students只是一个局部变量?如果是这样,我将如何使其可以全局访问?)。

3 个答案:

答案 0 :(得分:1)

我同意之前的回答。为什么不做呢

$scope.changePcStatus = function(){
    $scope.students.forEach(function(student){
        if(student.hasOwnProperty('skill')){
            student.skill++;
        }else{
            student.skill =0;
        }
    });

 // your code


}; 

答案 1 :(得分:1)

更新#2:

我认为@luiscarlosch发现了真正的问题。您的查看内容无法正常工作? $ http.get返回一个需要转换为学生对象的json字符串:

$http.get('js/data.json').success(function(data)
{
  $scope.students = angular.fromJson(data);
  console.log($scope.students[0]);
});

您的data.json需要包含一个简单的学生数组。如果您有更多信息,那么您的$ scope.students分配将需要更改。

更新#1:看起来@Chris打了我两分钟。哦,好吧。

我并不认为这是你所要求的,但正如@Kosmo建议的那样,你会循环学生并更新他们的技能。类似的东西:

$scope.changePcStatus = function()
{
    if ($scope.pcState == 'Off')
    {
        $scope.pcState = "On";
        $scope.students.forEach(function(student) {
            student.skill += 3;
        });
    }
    else alert("The pc was already turned on once!");
};

当然这只会更新视图。您仍然需要一些额外的工作来更新服务器端数据库。

答案 2 :(得分:0)

你可以先尝试记录结果,看看你到底得到了什么:

console.log(data);

然后你可以解析它

$scope.students = JSON.parse(data);

然后你可以操纵它。