2016-04-28 4 views
0

Ich habe bedingte Parameter auf ui-Router, weil ich den gleichen Bildschirm an verschiedenen Orten in einer App verwende. Ich muss eine Logik schreiben, um zu prüfen, welchen $stateParams Wert ich paramId zugewiesen habe. Ich habe es mit if und else versucht.

Gibt es einen besseren Ansatz, um diese Aufgabe zu erfüllen?

$scope.challengesDTO = { 
    challengeTypeLkupCode: 'RA_CHLNG_TYP_PRC' 
}; 

var paramId = $stateParams.processId ? $stateParams.processId : $stateParams.assessmentId; 

if ($stateParams.processId) { 
    $scope.challengesDTO.challengeTypeLkupCode = 'RA_CHLNG_TYP_PRC' 
} else if ($stateParams.assessmentId) { 
    $scope.challengesDTO.challengeTypeLkupCode = 'RA_CHLNG_TYP_RSKASES' 
} 

Antwort

1

Betrachten wir die Null-Coalescing Operator

Sie sollten in der Lage Ihr ternäre Operator mit the null coalescing operator in Javascript||, die im wesentlichen eine logische 'ODER' Anweisung zu ersetzen:

// This will set it to processId (if available), otherwise assessmentId 
var paramId = $stateParams.processId || $stateParams.assessmentId; 

A Ternary (wenn Sie wollen)

Wenn Sie jedoch nur besorgt waren über Ihre challengeTypeLkupCode Eigenschaft festlegen, können Sie den folgenden verwenden, die es je nachdem, ob processId existierte oder nicht gesetzt würde:

// Set your lookup type depending if processId exists or not 
$scope.challengesDTO.challengeTypeLkupCode = ($stateParams.processId) ? 'RA_CHLNG_TYP_PRC' : 'RA_CHLNG_TYP_RSKASES'; 

Zur besseren Lesbarkeit Zwecke können Sie am besten dran, nur mit eine if-Anweisung wie in Ihrem ursprünglichen Code.

+0

Gibt es eine Möglichkeit, den Wert zu überprüfen, der 'paramId' zugeordnet ist, 'processId' oder' assessmentId'? – hussain

+0

Nicht ohne einen weiteren Vergleich durchzuführen, um explizit zu sehen, ob 'paramId' gleich' processId' oder 'assessmentId' ist. Dies ist der Grund, warum eine if-Anweisung bevorzugt werden sollte, da Sie einen einzelnen Vergleich durchführen und all Ihre Logik für den Vergleich innerhalb des Rumpfes der if-Anweisung ausführen können. –

0

Für die, wenn sonst Bedingung u oben u erwähnt kann

$scope.challengesDTO.challengeTypeLkupCode=$stateParams.processId?'RA_CHLNG_TYP_PRC':$stateParams.assessmentId?'RA_CHLNG_TYP_RSKASES':"Default value u want to give"; 
0

Der erste Teil geht TRY mit einem logischen OR ||

var paramId = $stateParams.processId || $stateParams.assessmentId; 

Der zweite Teil ist mit einem verschachtelten ternäre Operator ?: und gibt den Wert selbst zurück, wenn kein Vergleich wahr wird.

$scope.challengesDTO.challengeTypeLkupCode = $stateParams.processId ? 
    'RA_CHLNG_TYP_PRC' : 
    $stateParams.assessmentId ? 
     'RA_CHLNG_TYP_RSKASES' : 
     $scope.challengesDTO.challengeTypeLkupCode; 
Verwandte Themen