首先对不起,如果之前有人问这个问题,但我找不到答案。另外,我对角度很新,所以如果这个问题看起来很愚蠢那么对不起。所以,继续开展业务。
我正在尝试构建一个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;
和控制器:
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;
基本上,我想要做的是,当我按下&#34;打开电脑&#34;按钮,&#34;技能&#34;关闭每个学生应该上升几点,这应该反映在视图中。
编辑:这似乎有效。非常感谢你。 @Cerad说如果我在data.json中有更多信息,我将不得不改变声明。怎么会这样? (我还有更多)。看来$ scope.students只能在.success中加入。如果我尝试在.success函数之外使用它,它只会破坏应用程序($ scope.students只是一个局部变量?如果是这样,我将如何使其可以全局访问?)。
答案 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);
然后你可以操纵它。