2014-09-23 1 views
0

Я отправил связанный с ним вопрос here on Stack Overflow и @ Kato помог мне с ответом. Я пытаюсь выполнить его ответ, но получить ошибку. Невозможно установить свойство «что-то» неопределенного.Невозможно установить свойство «что-то» неопределенной ошибки при попытке создать массив, отсортированный по датам.

Я сделал plnkr быть как можно более подробно: http://plnkr.co/edit/M4zEjpZ4kqTKn1sHHMt6

//controller 
angular.module('app').controller('DemoCtrl', function($scope, DatedList) { 
    $scope.world = 'world'; 

    var listRef = new Firebase("https://talllly.firebaseio.com/"); 
    $scope.weeks = DatedList(listRef); 

    $scope.addTask = function(){ 
    listRef.push({  
     text: $scope.task.text, 
     week: 40, 
     day: 2 
    }); 
    }; 


});  

angular.module('app').service('DatedList', function($timeout) { 
    return function(pathToList) { 
    var list = {}; 

    pathToList.on('child_added', function(snap) { 
     $timeout(function() { // force Angular to run $digest when changes occur 
     var data = snap.val(); 
     console.log(data); 
     var week_number = data.week; 
     var week_day = data.day; 
     list[week_number][week_day] = data; 
     }); 
    }); 

    //todo: write similar processing for child_changed and child_removed 

    return list; 
    } 
}); 

//html 
<form ng-submit="addTask()"> 
     <input placeholder="add task" ng-model="task.text"> 
    </form> 
    <div ng-repeat="(week, days) in weeks">  
    <h1>{{week}}</h1> 
    <div ng-repeat="(day, items) in days"> 
     <h2>{{day}}</h2> 
     <div ng-repeat="item in items"> 
      {{item|json}} 
     </div> 
    </div> 
    </div> 

ответ

5

Вы должны инициализировать list[week_number]:

pathToList.on('child_added', function(snap) { 
    $timeout(function() { // force Angular to run $digest when changes occur 
    var data = snap.val(); 
    console.log(data); 
    var week_number = data.week; 
    var week_day = data.day; 

    list[week_number] = {}; // <- Add this line here 
    list[week_number][week_day] = data; 
    }); 
}); 
0

Причиной, побуждающей вы получаете эту ошибку, потому что вы пытаетесь для добавления свойства в список [week_num], и это не объект.

Вы могли бы сделать

list[week_number] = list[week_number] || {}; 
list[week_number][week_day] = data; 

или

if(!angular.isObject(list[week_number]) { 
    list[week_number] = {}; 
} 
list[week_number][week_day] = data; 
Смежные вопросы