2016-07-14 6 views
0

Ich habe eine Funktion, die Ich mag würde verkürzen und es einfacher zu machen, da ich nicht gut bin mit javascript halte ich Fehler bekommen, wenn ich versuche, dies zu verkürzen:Javascript Verkürzung und concatinating Funktionen

$scope.doRefresh = function(){ 
    if($scope.bulletpointPopular){ 
     ArticleService.popular().then(function(data){ 
     $scope.articles = data; 
     }) 
     .finally(function() { 
     $scope.$broadcast('scroll.refreshComplete'); 
     }); 
    } 
    else { 
     ArticleService.all().then(function(data){ 
     $scope.articles = data; 
     }) 
     .finally(function() { 
     $scope.$broadcast('scroll.refreshComplete'); 
     }); 
    } 
    }; 

zu dies:

$scope.doRefresh = function(){ 
     if($scope.bulletpointPopular){ 
      $scope.popular(); 
     } 
     else { 
      $scope.latest(); 
     } 
     .finally(function() { 
      $scope.$broadcast('scroll.refreshComplete'); 
      }); 
     }; 

erorr:

Uncaught SyntaxError: Unexpected token .

+0

welche Fehler Sie bekommen? Sie vergessen zu erwähnen, – Ved

Antwort

1
$scope.doRefresh = function(){ 
    var articleType = $scope.bulletpointPopular? 'popular': 'all'; 

    ArticleService[articleType]().then(function(data){ 
     $scope.articles = data; 
    }).finally(function() { 
     $scope.$broadcast('scroll.refreshComplete'); 
    }); 
}; 

Wie wäre es damit. Also, der einzige Unterschied, den ich zwischen der Logik in if und anderen sehe, ist, welche Funktion ArticleService aufrufen soll. Machen Sie das also zu einer Variablen und rufen Sie sie auf, indem Sie von ArticleService als Eigenschaft darauf zugreifen.

ODER

$scope.doRefresh = function(){ 
    var articlePromise = $scope.bulletpointPopular? ArticleService.popular(): ArticleService.all(); 

    articlePromise.then(function(data){ 
     $scope.articles = data; 
    }).finally(function() { 
     $scope.$broadcast('scroll.refreshComplete'); 
    }); 
}; 

In diesem Fall auf dem Wert des Booleschen basiert, rufen Sie die entsprechende Funktion und das Versprechen erhalten, die zurückgegeben wird und dann lösen.

0

nicht ganz sicher über die Logik von Ihnen Code, aber Sie können eine neue Methode in ArticleService mit einem Eingabeparameter bulletpointPopular machen und diese Methode wird entweder popular() oder all() abhängig von bulletpointPopular Wert und in diesem Fall Ihre Code wird kürzer und schauen sein wie diese

$scope.doRefresh = function(){ 
    ArticleService.newMethod($scope.bulletpointPopular).then(function(data){ 
     $scope.articles = data; 
     }) 
     .finally(function() { 
     $scope.$broadcast('scroll.refreshComplete'); 
     }); 
}; 
+0

@Chanthu Antwort scheint besser zu sein, wusste nicht, dass Service-Methoden so aufgerufen werden können – tratto

1

Sie können es wie folgt tun:

$scope.popular = function() { 
    return ArticleService.popular(); 
}; 
$scope.latest = function() { 
    return ArticleService.all(); 
}; 
$scope.doRefresh = function() { 
    ($scope.bulletpointPopular ? $scope.popular() : $scope.latest()).then(function(data) { 
     $scope.articles = data; 
    }).finally(function() { 
     $scope.$broadcast('scroll.refreshComplete'); 
    }); 
};