2016-09-16 107 views
1

我知道它似乎是重複的,但事實並非如此。沒有什麼工作,無論我嘗試。無法將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。 任何想法是什麼問題?

+0

你拼錯數組的時候你」已經宣佈了它。你在互聯網上錯過了我。 – Dan

+0

,因爲我現在手寫那部分,但它在代碼 – Mocktheduck

+0

中是正確的,你能否給我們更多的代碼?看起來你的函數沒有權限訪問this.checkedInterviews。 – JOSEFtw

回答

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); 
 
})();

你也想嘗試:

​​

注意:你應該能夠使用this如果這一切都是在相同的功能。這也應該在全球範圍內發揮作用。我使用IIFE的唯一原因是將示波器分開了

以上添加的代碼段包含兩種情況。

如果不清楚什麼this是在你的問題btw。

+0

哇好吧我仍然得到錯誤,它不會讓我添加一個空的json – Mocktheduck

+0

添加工作代碼片段 – nikjohn

+0

This不回答這個問題。你剛剛創建了一個新的'checkedInterviews'(你拼錯了:'checkedIntervews')對象'Array',並沒有回答關於'this'對象的問題。爲什麼'this.checkedInterviews'等於'undefined'? – Hydro

0

如果他們在不同的功能,this在第二個功能是不同的對象。

2

看來,第二個功能是使用不同的this

在Angular模塊中,您可以將this分配給某個變量,然後嘗試從第二個函數訪問它。

如:

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

現在在功能上,你應該使用訪問:

vm.checkedInterviews.push();

+0

這種方式可能會導致內存泄漏。所以你最好仔細處理。 – Han

+0

你說得對,他們在不同的範圍 – Mocktheduck

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); 
}