在角度js中如何将对象数组推入数组。
这是我的代码
String str=path.toString();
int index = str.lastIndexOf('\\');
我怎样才能进入$ scope.records.students这里$ scope.records是一个数组。
我正在做什么错误我得到了"无法读取财产'推送'未定义"
答案 0 :(得分:2)
$ scope上的记录属性没有名为students的属性。因此,$scope.records.students
未定义。未定义没有任何可用的方法。你应该在推动之前确保学生存在。
另外,请注意ngModel通过引用传递。在原始代码中,{{s.name}}
列表只会在输入中显示文本,因为学生中的每个元素都指向相同的基础引用。您应该取消引用saveName接收的字符串。我在下面的代码中已经这样做了,但是尝试使用它,这样你就可以看到它是如何工作的。
更新的代码:
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<body ng-app="myApp" ng-controller="myCtrl">
<h1 ng-repeat="x in records">{{x.Class}}
</h1>
<div ng-repeat="s in records.students">{{s.name}}</div>
<input ng-model="formdata.name" type="text" />
<input type="button" value="Save" ng-click="saveName(formdata)">
<script>
var app = angular.module("myApp", []);
app.controller("myCtrl", function($scope) {
$scope.records = [{"Class":"Class 8"}];
$scope.saveName = function(name)
{
// Also, you need to derefence the object
// this is a quick and dirty way, try removing it and see
// what happens
var deRefName = JSON.stringify(name);
// Checks for the existence of students, if it doesn't exist
// sets students to an empty array
if (!($scope.records.students)) {
$scope.records.students = [];
}
$scope.records.students.push({"name":deRefName});
}
});
</script>
</body>
</html>
答案 1 :(得分:0)
正如错误所表示的那样,你无法访问records.students,因为它是一个数组,而不是一个对象。
您需要将记录作为对象并将其作为数组放入其中。 那么你应该能够访问$ scope.records.students。
或使用$ scope.records作为数组并使用index来访问它的特定对象。