无法将JSON对象推入Array

时间:2016-09-16 10:33:31

标签: javascript angularjs json

我知道这似乎是重复但不是。无论我做什么,都没有用。

我的角度模块中有一个列表:

this.checkedInterviews = []

然后是一个函数:

var interviewModel = {
                        interviewId: self.pendingInterviews[i].id,
                        status: self.pendingInterviews[i].status,
                        location: self.pendingInterviews[i].location,
                        start: self.pendingInterviews[i].start,
                        hideCheck: null
                    };
 this.checkedInterviews.push(JSON.stringify(interviewModel));

我得到Cannot read property 'push' of undefined。 不知道问题是什么?

4 个答案:

答案 0 :(得分:3)

var checkedIntervews = []
var interviewModel = {};
checkedIntervews.push(JSON.stringify(interviewModel));
console.log(checkedIntervews);

(function arrayPush() {
this.checkedIntervews = [];
var interviewModel = {};
this.checkedIntervews.push(JSON.stringify(interviewModel));
console.log(this.checkedIntervews);
})();

你想尝试:

var checkedIntervews = []
var interviewModel = {};
checkedInterviews.push(JSON.stringify(interviewModel));
$scope.checkedInterviews = checkedInterviews; //If using AngularJS because Angular is tagged in the question

注意:如果所有这些都在同一个功能中,您应该可以使用this。这应该也适用于全球范围。我使用IIFE的唯一原因是将范围分开

上面添加了两个案例的代码段。

如果不清楚你问题中的this是什么btw。

答案 1 :(得分:2)

看来,第二个功能是使用不同的this

在Angular Module中,您可以将this分配给某个变量,然后尝试从第二个函数访问它。

E.g:

var vm = this;
vm.checkedInterviews = [];

现在你应该使用以下功能访问它:

vm.checkedInterviews.push();

答案 2 :(得分:0)

如果他们放入不同的功能,那么第二个功能中的this是另一个对象。

答案 3 :(得分:0)

试试这个 Here is working fiddle

  var myApp = angular.module('myApp',[]);

  function MyCtrl($scope) {
  $scope.checkedInterviews = [];
  $scope.pendingInterviews = [{'id':1,'status':'pending','location':'abc','start':'start'}];
  for(i= 0; i < $scope.pendingInterviews.length; i++){
      var interviewModel = {
                      interviewId: $scope.pendingInterviews[i].id,
                      status: $scope.pendingInterviews[i].status,
                      location: $scope.pendingInterviews[i].location,
                      start: $scope.pendingInterviews[i].start,
                      hideCheck: null
      };
      console.log(interviewModel);
      $scope.checkedInterviews.push(JSON.stringify(interviewModel));
    }
  console.log($scope.checkedInterviews);
}