Angularjs - $ watch问题

时间:2014-12-30 10:17:56

标签: angularjs watch

我收到了这个错误,我不知道我做错了什么 错误:undefined不是对象(评估'$ scope.userFormData.cpr')

有人可以帮助我,因为我不确定我做错了什么,错误是我加载页面后很快

 $scope.$watch(function () {
                return $scope.userFormData.cpr;
            },
            function (cprValue) {

                console.log(cprValue);

                //For at scriptet ikke skal faile første gang det bliver loadet
                //tjekker vi om medlemmet har skrevet noget i cpr feltet
                if (cprValue === undefined) {
                    return false;
                }

                //Hent brugerens input og split dem op
                var cpr = cprValue.toString();

                //Hvis cpr undeholder en streg -

                var dd = +cpr.substr(0, 2); // 01
                var mm = +cpr.substr(2, 2); // 02
                var yy = +cpr.substr(4, 2); // 90

                //Calculate if 90 is > 50
                if (yy > 50) {
                    var year = yy + 1900;
                } else {
                    var year = yy + 2000;
                }

                //Sæt fødselsdags datoen sammen så momentJS forstår det
                var final = mm + "/" + dd + "/" + year;

                //Beregn datoen og split resultatet op så vi kun får fødselsdags tallet
                var alder = moment(final, "MM/DD/YYYY").fromNow().split(" ")[0];

                //Vi clear ageToYoung feltet hvis det har været udfyldt
                //og disabler andenBetaler vinduet igen
                $scope.ageToYoung = "";
                $scope.hideSecondpayer = true;


                //Hvis personen er mellem 15 og 18 år så vis andenBetaler boksen
                if ((alder >= 15) && (alder <= 18)) {
                    $scope.hideSecondpayer  = false;
                    $scope.hideRegnrBarn    = true;
                    $scope.hideKontonrBarn  = true;

                } else if (alder <= 14) {

                    //Personen er ikke gammel nok, og vi skriver det derfor til kunden
                    $scope.ageToYoung = "Du skal minimum være 15 år gammel";
                }

            });

1 个答案:

答案 0 :(得分:0)

不是在匿名函数中返回它,而是直接在范围对象上应用$watch -

$scope.$watch('userFormData.cpr',
            function (cprValue) {

                console.log(cprValue);

                //For at scriptet ikke skal faile første gang det bliver loadet
                //tjekker vi om medlemmet har skrevet noget i cpr feltet
                if (cprValue === undefined) {
                    return false;
                }

                //Hent brugerens input og split dem op
                var cpr = cprValue.toString();

                //Hvis cpr undeholder en streg -

                var dd = +cpr.substr(0, 2); // 01
                var mm = +cpr.substr(2, 2); // 02
                var yy = +cpr.substr(4, 2); // 90

                //Calculate if 90 is > 50
                if (yy > 50) {
                    var year = yy + 1900;
                } else {
                    var year = yy + 2000;
                }

                //Sæt fødselsdags datoen sammen så momentJS forstår det
                var final = mm + "/" + dd + "/" + year;

                //Beregn datoen og split resultatet op så vi kun får fødselsdags tallet
                var alder = moment(final, "MM/DD/YYYY").fromNow().split(" ")[0];

                //Vi clear ageToYoung feltet hvis det har været udfyldt
                //og disabler andenBetaler vinduet igen
                $scope.ageToYoung = "";
                $scope.hideSecondpayer = true;


                //Hvis personen er mellem 15 og 18 år så vis andenBetaler boksen
                if ((alder >= 15) && (alder <= 18)) {
                    $scope.hideSecondpayer  = false;
                    $scope.hideRegnrBarn    = true;
                    $scope.hideKontonrBarn  = true;

                } else if (alder <= 14) {

                    //Personen er ikke gammel nok, og vi skriver det derfor til kunden
                    $scope.ageToYoung = "Du skal minimum være 15 år gammel";
                }

            });