2015-09-02 6 views
1

Я пытаюсь использовать машинописный плагин углового Bootstrap с $ HTTP service.At первым, я использую $ http.success(), как это:

$scope.filterProvinces = function(val){ 
    return service.provinceList({ 
     pageSize : 10, 
     queryKey : val 
    }).success(function(data, status, headers, config){ 
      return data.data.list; 
     } 
    ).error(function(data, status, headers, config){ 
      alert("no result!"); 
      return ; 
    }); 
} 

, но это не так работаю, поэтому я меняю код, например:

$scope.filterProvinces = function(val){ 
    return service.provinceList({ 
     pageSize : 10, 
     queryKey : val 
    }).then(function(response){ 
     return response.data.data.list; 
    }); 
} 

и он работал, поэтому я был в замешательстве. Почему тогда() нормально, но success() неверен.

+0

Директива typeahead может работать со статическим массивом/коллекцией или обещанием. 'success' и' error' не являются стандартными методами обещаний. См. Https://docs.angularjs.org/api/ng/service/$http#deprecation-notice – Phil

ответ

3

Если вы проверяете AngularJS source, вы увидите, что на самом деле .success() занимает самое функцию в качестве аргумента, который затем вызывается, передавая в деконструированном объекте ответа, в конечном счете, вызывая .then() разрешить обещание.

Из-за отсутствия ясности это фактически не рекомендуется, и в документации для $http рекомендуется использовать .then().

$ http legacy обещают методы успеха и ошибки устарели. Вместо этого используйте стандартный метод. Если $ httpProvider.useLegacyPromiseExtensions установлено в false, то эти методы будут вызывать ошибку $ http/legacy.

Обязательно проверьте, чтобы эта ошибка не была выбрана.

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