好的,是的,我知道这是基本的知识,但这让我知道了。

这是代码:

myApp.controller('keyExpController', function ($scope, KeyExpDataService) {
    var ctrlExp = this;
    ctrlExp.keyExp = [];
    $scope.company = {};
    ctrlExp.achKeys = {
        company: [{
                achieves: [],
                details: {
                    super: "",
                    whyleft: ""

                }
            }]
    };
    $scope.keyachievements = [];
    $scope.compName = null;

    ctrlExp.fetchKeyExp = function () {
        //Resume Data
        KeyExpDataService.getKeyExpData().then(function (result) {

            ctrlExp.keyExp = result.data.resume.proexperience;
            console.log("Result: " + ctrlExp.keyExp);
            $scope.groupBy(ctrlExp.keyExp.length);
        });
    };
    ctrlExp.fetchKeyExp();

    // I group the friends list on the given property.
    $scope.groupBy = function (nbrComps) {

        //Set the global value for number of companies
        nbrCompanies = nbrComps;

        var compValue = "_INVALID_GROUP_VALUE_";

        for (var i = 0; i < nbrComps; i++) {

            $scope.keyachievements = ctrlExp.keyExp[i].keyachievements;

            if (ctrlExp.keyExp[i].companyat !== compValue) {

                $scope.company = [{
                        achievements: [],
                        details: {
                            companyName: ctrlExp.keyExp[i].companyat,
                            super: ctrlExp.keyExp[i].supervisor,
                            whyleft: ctrlExp.keyExp[i].reasonforleaving
                        }
                    }];

                compValue = $scope.company.companyName;
                $scope.compName = compValue;

//It's HERE, with the first line that I continually get the following error:
//TypeError: Cannot read property 'achieves' of undefined
//at Scope.$scope.groupBy (controllers.js:151)

//This is line 151 just below:
                achievements.company[i].achieves[i] = $scope.keyachievements;
                achievements.company[i].details.super = ctrlExp.keyExp[i].supervisor;
                achievements.company[i].details.whyleft = ctrlExp.keyExp[i].reasonforleaving;

                ctrlExp.achKeys.company[i].achieves[i] = $scope.keyachievements;
                ctrlExp.achKeys.company[i].details.super = ctrlExp.keyExp[i].supervisor;
                ctrlExp.achKeys.company[i].details.whyLeft = ctrlExp.keyExp[i].reasonforleaving;
            }
        }
    };
});


现在我正在做的很好,直到我在控制器中点击了。为简洁起见,我的对象看起来像这样:

    ctrlExp.achKeys = {
        company: [{
                achieves: [],
                details: {
                    super: "",
                    whyleft: ""

                }
            }]
    };


我无法弄清楚,对于我的一生,是的,因为我已经超过50岁,为什么我不能为对象的第一部分分配任何内容:

这个:
    ctrlExp.achKeys.company [0] .achieves [0] = $ scope.keyAchievements

$ scope.keyAchievements包含特定公司的所有项目符号。一个人的简历上可能有“ n”个公司。因此,我要遍历公司以获取公司的名称以及某人位于该公司“下方”的“关键成就”。

就是这样。

我将发布“服务”,但是此站点是我自己站点的一部分,尚未发布,我将其用作模板以供将来考虑。一旦知道了,我就会很高兴。

感谢大家为我们的工艺做出的贡献。

最佳答案

似乎正在尝试为尚未定义的变量设置值,即achievements.company[i]

因此,如果您添加以下内容:

achievements.company[i]={};


在您的151行之前,它可以工作。好吧,你不会得到


  TypeError:无法读取未定义的属性“成就”


消息了。



在JavaScript中,您可以具有未定义的变量/对象,但是不能为其分配属性。



从上面的错误消息看,好像定义了achievements,而没有定义achievements.company[i],因此当您要为其分配achieves[i]属性时就出现了问题。

如果未定义achievements,您将收到以下消息:


  无法读取未定义的属性“ company”

09-20 00:08