javascript - 动态创建一个 JavaScript 对象

标签 javascript angularjs

我想使用 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/

相关文章:

javascript - 数组中的数组,AngularJS,ng-repeat

angularjs - 从 ngRoute 迁移到 ui-router

javascript - 从鼠标滚轮事件内部检测 jQuery 滚动事件

javascript - 当内容在视口(viewport)中时应用 css 动画(连同 pagepiling.js)

javascript - Angular JS 弹出对话框

javascript - 为什么我的 $timeout.cancel 在这里起作用,但在这里不起作用?

javascript - 是否可以为 Internet Explorer 用户启用 CSS3 功能?

javascript - 如何在数组中存储对象的不同状态?

javascript - 无法接收从服务器到客户端的语言文本

java - 使用 AngularJS 传递参数时 Resteasy @FormParam null