2015-04-09 35 views
7

Kullanıcının bir yorum formu gönderdiği bu Açısal projede çalışıyorum ve yeni yorum zaten gönderilmiş olan yorumlara eklendi. İşte benim kodum.TypeError: undefined özelliği 'push' özelliği okunamıyor, JavaScript

.controller('productCtrl', function($scope, $http, $routeParams, Page){ 
$scope.product = {}; 
$scope.review = {}; 
$scope.comments = {}; 

routeparm = $routeParams.param; 

$scope.review = function(){ 
    var review_box = $scope.review_form.review_box; 

    $http.post('./comment.php', { 
     comment : review_box, 
     code: routeparm 
    }) 

    .success(function(data){ 
      $scope.comments.push(data.comments); 
      $scope.review.review_box = ''; 
    }) 

    .error(function(data){ 
     $scope.has_error = true; 
     $scope.error_message = data; 
    }) 

}; 

Ancak, bir açıklama eklemeye çalıştığımda aşağıdaki hatayı alıyorum.

TypeError: Cannot read property 'push' of undefined 

Boş bir $ scope.comments = {}; öyleyse neden bu hatayı alıyorum? Ve bunu nasıl düzeltebilirim? Teşekkürler

+3

json nesnesi için itmek kullanamaz deneyebilirsiniz. Ancak bu, $ scope.comments = []; bunu dizi olarak başlatırsanız. –

+1

Her şeyden önce, neden 'push' bir nesneyi kullanıyor? –

cevap

10

Bildirdiğiniz yorumlar bir Object. Sadece bir diziye senin beyanı değiştirmek

Gönderen:

$scope.comments = {}; 

için:

$scope.comments = []; 

DÜZENLEME: Yeni Nesne itin gerekiyorsa , Sen gerek Yorumlarınızı Object of Array (Nesne Dizisi) gibi yapın ve yeni nesneyi itin.

$scope.comments = { 
    1: {name:'',review:'',comment:'',uptime:'',gravatar:''} 
} 

$scope.comments.push({name:'rukshi', review:'test comment',comment:'yet another comment',uptime:'',gravatar:''}); 
+0

Hata devam ederken, json verileri şu şekildedir: {"comments": {"name": "rukshi", "review": "test comment", "uptime": 1428553143000, "gravatar": "http: \/\ /www.gravatar.com \/avatar \/ca1a69438a32fd2aa60806b90a960753? s = 48 "}," error ": {" has_error ": false}} – rksh

+0

Evet, gönderilmemiş kod bölümünde başka bir sorun oluştu. $ scope.comments'ı undefined olarak ayarlar, bunu düzeltin ve düzeltmeniz ile her şey iyi çalışıyor. Teşekkürler – rksh

2

Bu

.controller('productCtrl', function($scope, $http, $routeParams, Page){ 
    $scope.product = {}; 
    $scope.review = {}; 
    $scope.comments = []; 

    routeparm = $routeParams.param; 

    $scope.review = function(){ 
    var review_box = $scope.review_form.review_box; 

$http.post('./comment.php', { 
    comment : review_box, 
    code: routeparm 
}).success(function(data){ 
     $scope.comments.push(data.comments); 
     $scope.review.review_box = ''; 
}).error(function(data){ 
    $scope.has_error = true; 
    $scope.error_message = data; 
}) 

}; 
İlgili konular