2015-09-03 6 views
-2

Здравствуйте, я хотел бы спросить, есть ли лучший способ конвертировать мой код в лучшую или более быструю сторону? Как вы можете видеть, это вложенные операторы if. Я хочу, чтобы это была меньшая строка кода. Любая помощь?Фиксация кода

$scope.check = function (viewLocation) { 
    if(viewLocation == "videos"){ 
     $scope.icon_video = 'img/video-active.png'; 
     $scope.icon_events = 'img/events.png'; 
     $scope.icon_stocks = 'img/stocks.png'; 
     $scope.icon_chat = 'img/chat.png'; 
    }else{ 
     if(viewLocation == "events"){ 
     $scope.icon_video = 'img/video.png'; 
     $scope.icon_events = 'img/events-active.png'; 
     $scope.icon_stocks = 'img/stocks.png'; 
     $scope.icon_stocks = 'img/chat.png'; 
     }else{ 
     if(viewLocation == "stocks"){ 
      $scope.icon_stocks = 'img/video.png' 
      $scope.icon_stocks = 'img/events.png' 
      $scope.icon_stocks = 'img/stocks-active.png' 
      $scope.icon_chat = 'img/chat.png' 
     }else{ 
      if(viewLocation == "chat"){ 
       scope.icon_stocks = 'img/video.png' 
       $scope.icon_stocks = 'img/events.png' 
       $scope.icon_stocks = 'img/stocks.png' 
       $scope.icon_chat = 'img/chat-active.png' 
      }else{ 
       scope.icon_stocks = 'img/video.png' 
       $scope.icon_stocks = 'img/events.png' 
       $scope.icon_stocks = 'img/stocks.png' 
       $scope.icon_chat = 'img/chat.png' 
      } 
     } 
     } 

    } 
}; 
+1

Hey Dren, вероятно, это лучше [CodeReview] (http://codereview.stackexchange.com) – ScottMcGready

ответ

1

Что-то как этот мощь работы:

$scope.check = function (viewLocation) { 
    $img_arr = array("video","events","stocks","chat"); 

    foreach($img_arr as $imgcurk => $imgcurv){ 
     ${"scope.icon_" . $imgcurk} = "img/" . $imgcurk; 
     if($imgcurk == viewLocation){ 
      ${"scope.icon_" . $imgcurk} .= "-active"; 
     } 
     ${"scope.icon_" . $imgcurk} .= ".png"; 
    } 
}; 

Пожалуйста, обратите внимание, я час не проверял это вообще, но теория применяется.

+0

Я не вижу, как этот код работает. Можете ли вы поддержать свой ответ рабочим кодом. –

+0

«Это может работать» и «Я не проверял это», объясните. – ScottMcGready

1

один из способов его улучшения является:

$scope.check = function (viewLocation) { 
    $scope.icon_stocks = 'img/video.png' 
    $scope.icon_stocks = 'img/events.png' 
    $scope.icon_stocks = 'img/stocks.png' 
    $scope.icon_chat = 'img/chat.png' 

    if (viewLocation == "videos") { 
     $scope.icon_chat = 'img/chat-active.png' 
    } else if (viewLocation == "events") { 
     $scope.icon_stocks = 'img/events-active.png' 
    } else if (viewLocation == "stocks") { 
     $scope.icon_stocks = 'img/stocks-active.png' 
    } else if (viewLocation == "chat") { 
     $scope.icon_chat = 'img/chat-active.png' 
    } 
}; 

, если есть возможность иметь по крайней мере один активную вкладку, то последний «еще, если» может быть просто «еще»

+0

Вместо расширенных команд if/elseif/else, которые могут стать громоздкими, посмотрите на инструкции switch/case. Они обеспечивают большую гибкость и легче поддерживать в будущем. В настоящий момент вся цепочка кода выполняется, если 'viewLocation' является чатом, который может быть немного неэффективным. – ScottMcGready

+0

Используйте http://jsperf.com/ для поддержки своих аргументов. –

+0

Um, no. Мне не нужно это делать. Если вы google if/else vs switch вы можете узнать больше самостоятельно – ScottMcGready

Смежные вопросы