Saad Hamani Ответов: 1

Typeerror: не удается прочитать свойство 'typerevueesr' undefined


Привет,

Моя потребность заключается в том, что я хочу, чтобы ввода "дата подписания де л''offre", чтобы быть помечены как "обязательные", если опция "электронная подпись-дю-контракт", посвященного выбран.

Я не знаю, в чем проблема, мне кажется, что все в порядке. Но он показывает мне следующую ошибку:

TypeError: Cannot read property 'typeRevueESR' of undefined at Scope.SupportDemandeCtrl.$scope.matchSelectedTypeRevueESR (SupportDemandeApp.js:70)

Вот код на Плунжер

SupportDemandeApp.js :
///<reference path="../Scripts/angular.min.js" />
///<reference path="../Scripts/angular-route.min.js" />

var supportDemandeApp = angular.module('supportDemandeApp', ['ngMessages']);

supportDemandeApp.controller('SupportDemandeCtrl', ['$scope', '$filter', SupportDemandeCtrl]);

supportDemandeApp.run(function ($rootScope) {
$rootScope.typeOf = function (value) {
    return typeof value;
};
})

supportDemandeApp.directive('stringToNumber', function () {
return {
    require: 'ngModel',
    link: function (scope, element, attrs, ngModel) {
        ngModel.$parsers.push(function (value) {
            return '' + value;
        });
        ngModel.$formatters.push(function (value) {
            return parseFloat(value);
        });
    }
};
});

function SupportDemandeCtrl($scope, $filter) {

//Fonction : Type de contrat (IS/OS)
$scope.typeContrat = function () {
    $scope.typesContrat = ['Niv.I - Impartition IMS',
                            'Niv.II - Impartition TMA / AMS',
                            'Niv.III - Projet',
                            'Niv.IV - Impartition BPO',
                            'Multi - Tiers avec Impartition',
                            'Multi-Tiers CS & Projet',
                            'Vente de licence ou produit sans services ni modification'
                            ];

    $scope.selectedTypeContrat = {};
};

$scope.matchSelectedTypeContrat = function () {
    if (($scope.selectedTypeContrat.typeContrat === 'Niv.I - Impartition IMS') ||
        ($scope.selectedTypeContrat.typeContrat === 'Niv.II - Impartition TMA / AMS') ||
        ($scope.selectedTypeContrat.typeContrat === 'Niv.IV - Impartition BPO') ||
        ($scope.selectedTypeContrat.typeContrat === 'Multi-Tiers avec Impartition'))
        return true;
    else
        return false;
};

//Fonction : Date de signature de l’offre / Type Revue ESR
$scope.typeRevueESR = function () {
    $scope.typesRevueESR = ["A - Faire une offre ou non",
                            "B - Stratégie de l'offre",
                            "A/B",
                            "C - Soumission de l'offre",
                            "A/B/C",
                            "E - Signature du contrat"
                            ];

    $scope.selectedTypeRevueESR = {};
};

$scope.matchSelectedTypeRevueESR = function () {
    if ($scope.selectedTypeRevueESR.typeRevueESR === 'E - Signature du contrat')
        return true;
    else
        return false;
};
}


SupportDemande.cshtml по :
<script src="~/ScriptsJS/SupportDemande.js" type="text/javascript"></script>
<script src="~/ScriptsJS/SupportDemandeApp.js"></script>

<div ng-app="supportDemandeApp" ng-controller="SupportDemandeCtrl">
	<form class="form-horizontal" id="supportDemandeForm" name="supportDemandeForm" method="post" ng-submit="validationSupportDemande(supportDemandeForm.$valid)" novalidate>
		<fieldset>
			<div class="form-group">
				<label for="selectTypeRevue" class="col-lg-2 control-label">Type de revue à réaliser<span style="color:red"> *</span></label>
				<div class="col-lg-10">
					<select class="form-control" id="selectTypeRevue" name="selectTypeRevue" ng-model="selectedTypeRevue" required>
						<option disabled hidden selected></option>
						<option ng-option>ESR</option>
						<option ng-option>SSR</option>
					</select>
			</div>

			<div class="form-group" ng-if="selectedTypeRevue == 'ESR'">
				<label for="selectTypeRevueESR" class="col-lg-2 control-label">Type de revue ESR à réaliser<span style="color:red"> *</span></label>
				<div class="col-lg-10">
					<select class="form-control" id="selectTypeRevueESR" name="selectTypeRevueESR" ng-model="selectedTypeRevueESR.typeRevueESR" ng-init="typeRevueESR()" ng-options="typeRevueESR for typeRevueESR in typesRevueESR" required></select>
			</div>
			
			<div class="form-group has-warning" ng-required="matchSelectedTypeRevueESR()">
				<label for="inputDateSignatureOffre" class="col-lg-2 control-label">Date de signature de l’offre</label>
				<div class="col-lg-10">
					<input type="date" class="form-control" id="inputDateSignatureOffre" name="inputDateSignatureOffre" ng-model="inputDateSignatureOffre">
			</div>
		</fieldset>
	</form>
</div>


Что я уже пробовал:

Я попытался добавить 'factoryService' & '$scope ' в качестве элементов массива...

1 Ответов

Рейтинг:
1

Dave Kreskowiak

"Undefined" - это javascript для объекта, который не существует, или null в других языках.

Вы пытаетесь получить / установить значение свойства для объекта, который не существует. Где-то в вашем коде вы пытались получить экземпляр объекта или не смогли создать объект и попытались использовать его, не проверяя, существует ли он на самом деле или нет.


Saad Hamani

Я отредактировал свой вопрос и добавил свою потребность и SupportDemande.cshtml

Dave Kreskowiak

Хорошо, и мой ответ не изменится. Вот тут-то и пригодятся ваши навыки отладки. Я не могу сделать это для вас, так как у меня нет кода, данных, которые он использует, и времени, чтобы сделать вашу работу за вас.

Saad Hamani

http://plnkr.co/edit/Y216fRSgABRKAA04XSoS

Dave Kreskowiak

А это что такое? Я не нажимаю на нее, и я уже сказал вам, что у меня нет времени делать вашу работу за вас. Я уже сказал тебе, что происходит. Вам предстоит выяснить, почему этот объект равен нулю.