2016-01-13 4 views
0
//Load Property Types 
$scope.getAddressByPostcode = function() { 
    PostCodeLookup.getAddress(function(postCodeAddress,'NN4 5DT') { 
    $scope.postCodeAddress = postCodeAddress; 
    console.log($scope.postCodeAddress); 
    }); 
}; 

У меня есть код в моем контроллере. Ниже то, что я имею в моем угловом заводеУгловой обратный вызов с аргументами

'use strict'; 

angular.module('core').factory('PostCodeLookup', ['$http', function($http) { 
var apService = 'https://api.postcodes.io'; 

function getAddressByPostcode(callback,postcode) { 
    $http({ 
     method: 'GET', 
     url: apService+ '/postcodes/'+postcode, 
     cache: true 
    }).success(callback); 
} 
return { 
    getAddress: getAddressByPostcode 
}; 
}]); 

я имею проблему передачи аргументов в мой getAddressByPostcode вместе с обратным вызовом.

Угловой не обрабатывает обратный вызов с параметрами.

ответ

0

Похоже, что ваш код должен быть таким:

$scope.getAddressByPostcode = function() { 
    PostCodeLookup.getAddress(function(postCodeAddress) { 
    $scope.postCodeAddress = postCodeAddress; 
    console.log($scope.postCodeAddress); 
    },'NN4 5DT'); 
}; 

Обратите внимание на размещение почтового параметра кода.

Как предложил @Martijn, лучшим решением будет просто вернуть обещание из вашей заводской функции:

function getAddressByPostcode(postcode) { 
    return $http({ 
     method: 'GET', 
     url: apService+ '/postcodes/'+postcode, 
     cache: true 
    }); 
} 
return { 
    getAddress: getAddressByPostcode 
}; 

Затем использовать его как это:

PostCodeLookup.getAddress('NN4 5DT').then(function(result) {    
    $scope.postCodeAddress = result.data; 
    console.log($scope.postCodeAddress); 
}); 
+1

Было бы лучше, чтобы вернуть обещание и обрабатывать .Затем в вместо использования обратного вызова –

+0

Да. Я согласен, позвольте собеседнику решить, как обрабатывать успех/ошибку. – pixelbits

+0

Да, спасибо за ответ, да, я могу это сделать, но просто изучал, есть ли способ делать аргументы с обратными вызовами. – user2717619

0

Может быть, это фрагменты кода поможет использовать обратные вызовы с аргументами:

Создание обратного вызова-объект:

function createCallback(p_context, p_function, p_params) { 

    if(angular.isFunction(p_function)) { 
    var callback = { 
     'context': p_context, 
     'function': p_function, 
     'params': p_params 
    }; 

    return callback; 
    } else { 

    logger.error('createCallback(context, function, params): function not defined'); 
    } 
} 

выполнения обратного вызова:

function executeCallback(p_cb) { 

    var callback = p_cb; 

    cb['function'].call(cb['context'], cb['params']); 
} 

Подведем в службе, это многоразовые ...

Greets Christian