Рефакторинг кода Angularjs - PullRequest
0 голосов
/ 01 июня 2018

У меня есть проект angularjs, в котором у меня есть этот блок кода, который запускается в зависимости от выпадающего списка.В этом коде часть , если и else в основном похожи, я хочу изменить код так, чтобы код не повторялся.

 if (1 === $scope.form.type) {
    response = $scope.resource.searchItemSalesInfo(params.get, params.post,function(response, headers) {
        angular.forEach(response, function(row, id) {
            response[id].prod_info = row.alias + ' (' + row.final_product_id + ') ';
        });
        $scope.totalCount = headers('x-total-count');
    });
} else {
    response = $scope.resource.searchOrderSalesInfo(params.get, params.post,function(response, headers) {
        angular.forEach(response, function(row, id) {
            response[id].prod_info = row.alias + ' (' + row.final_product_id + ') ';
        });
        $scope.totalCount = headers('x-total-count');
    });
}

Я пыталсяуберите обычную функциональность описанным ниже способом, но тогда код не работает и нарушает функциональность.

$scope.callresource = function(resourcename){
    response = $scope.resource.resourcename(params.get, params.post,function(response, headers) {
        angular.forEach(response, function(row, id) {
            response[id].prod_info = row.alias + ' (' + row.final_product_id + ') ';
        });
        $scope.totalCount = headers('x-total-count');
    });
}



   if (1 === $scope.form.type) {
        $scope.callresource(searchItemSalesInfo);
    } else {    

$scope.callresource(searchOrderSalesInfo);
    }

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

В качестве альтернативы моему другому ответу, вы можете передать ссылку на функцию, которую вы хотите выполнить в $scope.callresource ... другими словами функция обратного вызова

Я считаю,это более масштабируемый подход.

$scope.callresource = function(resourceCallbackFunction){
    response = resourceCallbackFunction(params.get, params.post,function(response, headers) {
        angular.forEach(response, function(row, id) {
            response[id].prod_info = row.alias + ' (' + row.final_product_id + ') ';
        });
        $scope.totalCount = headers('x-total-count');
    });
}


if (1 === $scope.form.type) {
    $scope.callresource($scope.resource.searchItemSalesInfo);
} else {    
    $scope.callresource($scope.resource.searchOrderSalesInfo);
}
0 голосов
/ 01 июня 2018

Вы не можете вызвать функцию, используя этот синтаксис $scope.resource.resourcename, потому что этот синтаксис говорит JS выполнить функцию с именем resourcename.

Вместо этого попробуйте использовать скобочную запись:

$scope.resource[resourcename](..)

Кроме того, при вызове функции $scope.callresource передайте аргументы в виде строк, поскольку searchItemSalesInfo и searchOrderSalesInfo в настоящее время JS пытается найти их как переменные.

$scope.callresource('searchItemSalesInfo');

Ваш код будет выглядеть так:

$scope.callresource = function(resourcename){
    response = $scope.resource[resourcename](params.get, params.post,function(response, headers) {
        angular.forEach(response, function(row, id) {
            response[id].prod_info = row.alias + ' (' + row.final_product_id + ') ';
        });
        $scope.totalCount = headers('x-total-count');
    });
}


if (1 === $scope.form.type) {
    $scope.callresource('searchItemSalesInfo');
} else {    
    $scope.callresource('searchOrderSalesInfo');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...