2017-01-13 3 views
0

Ich habe eine eckige Vorlage mit einem Formular für Benutzerdaten. Einige Felder wie Name und Adresse nur angezeigt, wenn der Benutzer eine Rechnung benötigt:Angular ng-show spiegelt nicht den Wert der Bedingung

<div class="personal-details" ng-show="showInvoiceFields()"> 
    <!-- input fields here... --> 
</div> 

Ich habe eine Funktion showInvoiceFields() im Rahmen, die true zurück, wenn der aktuelle Benutzer über „Rechnung Rolle“ oder wenn das Produkt erfordert eine Rechnung.

$scope['showInvoiceFields'] = function() { 
    console.log('hasInvoiceRole: ' + $scope['hasInvoiceRole']); 
    console.log('product:'); 
    console.log($scope['product']); 
    return $scope['hasInvoiceRole'] || $scope['product'].needsInvoice; 
    }; 

Dieser Teil des Formulars ist zunächst verborgen, bis ein Produkt aus einem Dropdown ausgewählt wird. Zunächst las ich dies in der Konsole, da der Benutzer nicht Rechnung Rolle spielt:

hasInvoiceRole: false 
product needs invoice: 
undefined 
undefined 

Wenn ich ein Produkt auswählen, die Rechnung erfordert, habe ich gelesen:

hasInvoiceRole: false 
product needs invoice: 
{... a ver big object..., needsInvoice: true, ...} 

jedoch die Felder nicht tun Show. Dies geschieht nur in der Produktion. Vielleicht gibt es etwas Spezifisches über den verfälschten Code, der das Problem verursacht?

Antwort

0

So fand ich das Problem in meinem Code. Der Täter liegt hier:

$scope['product'].needsInvoice 

Wenn Winkel minifies der Code, ist es wahrscheinlich alle Variablen umbenennt, darunter "needsInvoice". Um es zu beheben, änderte ich einfach diese Zeile zu:

$scope['product']['needsInvoice'] 
Verwandte Themen