我想使用 AngularJS
创建一个日历,我的模型是这样一个对象:
$scope.model = {
weeks: [
{
days: [
null,
{
name: "3 dec",
toDoItems: [{ name: "Task 1" }, { name: "Task 2"}]
},
{
name: "4 dec",
toDoItems: [{name: "Task 1"}, {name: "Task 2"}]
}
]
},
{
days: [
null,
{
name: "5 dec",
toDoItems: [{ name: "Task 1" }, { name: "Task 2"}]
},
{
name: "6 dec",
toDoItems: [{name: "Task 1"}, {name: "Task 2"}]
}
]
}
]
}
但我想动态创建对象。
我试过类似的方法,但它给了我以下错误:
TypeError: Cannot call method 'push' of undefined
$scope.fillMonth = function () {
var gap = dayInWeek($scope.year.value, $scope.month, 1),
nrOfDays = daysInMonth($scope.year.value, $scope.month);
$scope.model = {};
for (var i = 0; i < (nrOfDays + gap) % 7; i++) {
for (var j = 0; j < 7; j++) {
if (j === 0)
$scope.model.weeks.push([]);
if (i === 0 && j < gap)
$scope.model.weeks[i].days.push(null);
else
$scope.model.weeks[i].days.push([{ name: i + ' ' + j, toDoItems: [{ name: "Task 1" }, { name: "Task 2"}]}]);
}
}
}
谁能帮我解决这个问题?提前致谢!
最佳答案
问题是 weeks
不存在。您需要先像这样创建它:
$scope.model = {};//new object
$scope.model.weeks = [];//new array
之后您不想推送一个空数组,而是推送一个包含天数数组的新对象:
var weeksObj = {};//new object
weeksObj.days = [];//new array
$scope.model.weeks.push(weeksObj);
然后您可以像这样为 null 推送您的日期值:
weeksObj.days.push(null);
对于你的天对象,再次创建一个新对象:
var dayObj = {};//new object
dayObj.name = "name";//set name property
dayObj.toDoItems = [];//new array
weeksObj.days.push(dayObj);
希望这能帮助您了解问题出在哪里。您似乎有点混淆了对象 ({}
) 和数组 ([]
)。只有数组才有 push 方法
关于javascript - 动态创建一个 JavaScript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19098359/