如何将对象数组推入scop数组?

时间:2018-04-16 18:50:33

标签: angularjs

在角度js中如何将对象数组推入数组。

这是我的代码

String str=path.toString();
int index = str.lastIndexOf('\\');

我怎样才能进入$ scope.records.students这里$ scope.records是一个数组。

我正在做什么错误我得到了"无法读取财产'推送'未定义"

2 个答案:

答案 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来访问它的特定对象。