Ich habe ein select-Tag, das ng-options und ng-model verwendet. Wenn ich eine Option auswähle und dann die Standardoption erneut auswähle und das Formular abschicke, scheint der ausgewählte Wert zu verschwinden. Dies ist ein optionales Auswahlfeld. Daher muss ich prüfen können, ob beim Senden nichts ausgewählt ist.AngularJS ng-options Auswahl des Standardwertes nach Auswahl der Option führt zu: "TypeError: Kann die Eigenschaft '[property]' von null nicht lesen.
Ich habe mehrere Fragen ähnlich wie diese gefunden, aber keiner mit diesem Problem genau:
- https://github.com/angular/angular.js/issues/11685 (Ich habe keine benutzerdefinierten select-Tag-Richtlinie)
- AngularJS ng-options removed default blank value after selecting an option (Ich verwende bereits die Format in der Antwort)
- Angularjs - TypeError: Cannot read property 'name' of undefined" when work with dropdown (ich bin schon ein Modell Eigenschaft verwendet, wie in der Antwort vorgeschlagen)
- Cannot read property $scope.dropdownfield of null in angularjs (erkläre ich meine Daten vorher)
Hier ist eine einfache Geige ich mein Problem gemacht darstellt: https://jsfiddle.net/tjadenad/tse4ans1/29/
Anweisungen für die Replikation Fehler:
- Konsole öffnen in Browser
- Wählen Sie eine Option aus der Auswahlliste.
- Wählen Sie die Standardoption ("Wählen Sie eine Option") aus der Auswahlliste aus.
- Drücken Sie den Absenden-Button und den Fehler in der Konsole
hier sehen, ist die html:
<div ng-app="app">
<div ng-controller="TestController as ctrl">
<form data-ng-submit="ctrl.submit()">
<label for="test-select">
Label
</label>
<br />
<select id="test-select" name="optionId"
data-ng-model="ctrl.modelObject.selectedOption"
data-ng-options="option as option.description for option in ctrl.options track by option.id">
<option value="">Select an Option</option>
</select>
<br />
<button type="submit">Submit</button>
</form>
</div>
</div>
Hier ist die Steuerung:
angular.module('app', []).controller('TestController', function() {
var vm = this;
vm.modelObject = { selectedOption: {id: '', description: ''} };
vm.submit = submit;
vm.options = [
{
id : 1,
description: 'Option 1'
},
{
id : 2,
description: 'Option 2'
}
];
function submit() {
var objectFromOptions = {
optionId : vm.modelObject.selectedOption.id
};
}
});
Ich brauche ein Objekt zu erstellen nach dem Senden mit der ID der Option als eine der Eigenschaften. Wenn die ID null oder leer ist, ist das in Ordnung, aber ich kann keine Möglichkeit finden, zu überprüfen, ob es null ist. Ich habe versucht mit
angular.isDefined(vm.modelObject.selectedOption.id)
, aber das wirft den gleichen Fehler beim Versuch, auf 'ID' zuzugreifen.
Ich habe auch versucht
vm.modelObject.selectedOption.hasOwnProperty('id')
die Eigenschaft des neuen Objekts zu setzen, wie so:
function submit() {
var objectFromOptions = { };
if (vm.modelObject.hasOwnProperty('selectedOption')) {
console.log('selectedOption exists');
} else {
console.log('selectedOption does not exist');
}
if (vm.modelObject.selectedOption.hasOwnProperty('id')) {
console.log('id exists');
objectFromOptions.optionId = vm.modelObject.selectedOption.id
} else {
console.log('id does not exist');
}
}
Daraus ergibt sich:
selectedOption exists
durch den Fehler gefolgt:
TypeError: Cannot read property 'hasOwnProperty' of null
Bitte lassen Sie mich wissen, wenn weitere Informationen erforderlich sind. Vielen Dank im Voraus für jede Hilfe!
Ihre '' ist das 'ng-Modell 'Einstellung' "" ', nicht den' modelObject', dass es mit gestartet. – Claies
vm.modelObject.hasOwnProperty ('selectedOption') === true, aber es ist value === null. Fügen Sie einfach "Wähle eine Option" als 0-tes Element von vm.options hinzu, anstatt vm.modelObject.selectedOption = vm.options [0] als Standard festzulegen. – Nosyara
Wenn Sie einen 'ng-change' -Handler für Ihr Dropdown-Menü erstellen und sich darin' vm.modelObject' ausloggen, sehen Sie, dass 'vm.modelObject.selectedOption === null'. – Claies