AngularJS - Задание переменных внутри http-вызова из функции?

0

Я отчаянно нуждаюсь в помощи.

У меня есть функция, которая выглядит так:

$scope.getData = function(id)
{
    $http.get('/url' + id).success(function (data) {
        return data.a.b.c;
    });
};

теперь в моей другой функции у меня есть что-то вроде этого:

$scope.obj= {};
        $scope.obj.name = $scope.user.displayName;
        $scope.commentObj.id= $scope.id;
        $scope.obj.blah = blah;
       $scope.obj.otherDataThing = $scope.getUserProfileData($scope.commentObj.userId);

теперь эта переменная НИКОГДА не устанавливается, когда я отправляю URL-адрес, чтобы создать фактический объект данных в монго. Он просто не появляется. Я знаю, что это нужно делать с синхронностью, но я не могу понять это. Помогите!

заранее спасибо

4 ответа

0

Закончился, только решая его, вложив http-звонки. Что-то вроде этого:

http.get = function ...
    http.post = function...

не могу поверить, что я не думал об этом до facepalm

0

вот как я это делаю. мы используем отсрочку

в моем сервисе :: productService.js

angular.module('appName')
    .service('ProductService', function ($http, $q, $window) {
        var base_url = $window.base_url;

    this.get_products = function (data) {
                var deferred = $q.defer();
                var where = data || {};
                $http
                    .get(base_url + '/item', { params: where })
                    .then(function (response) {
                        deferred.resolve(response);
                    }, function (err) {
                        deferred.reject(err);
                    });

                return deferred.promise;
            };

});

то в контроллерах вы можете ввести селектор и получить его через

$scope.products = [];
    ProductService
       .get_products({ page: self.page })
                .then(function (resp) {
                   $scope.products = resp.a.b;
                   console.log(resp);
                   // success response
                }, function (err) {
                    console.log(err);
                    // Error Response
                });
0

Использовать конвенцию

Сделать обещанную функцию

function MyCoolFunction(passed) {
     return $http.get('url' + passed)); //<-- return $http
     //_____________________^__________ this should be comma (,)
}

Затем назовите его

$scope.obj= {};
$scope.obj.name = $scope.user.displayName;
$scope.commentObj.id= $scope.id;
//_________________^_____ assigning to id property but using $scope.commentObj.userId
$scope.obj.blah = blah;

MyCoolFunction($scope.commentObj.userId).then(function(successResponse){ // <-- success_callback    
        $scope.obj.otherDataThing = successResponse.a.b.c; // <-- assignment of result
    }, function(errorResponse){ // <-- error callback
        $scope.error = errorResponse.message || errorResponse;
});
  • 0
    это не работает, когда я использую точечную нотацию, такую как myObj.someproperty
  • 0
    Оно работает! Проверьте ваш объект, поместите console.log повсюду, этот пример, который я показал, полностью правдив.
Показать ещё 1 комментарий
0

Просто установите myObj = data или myObj.prop = data или myObj.prop.push(data) или что бы вы ни делали в своем вызове $http.

function ... = (passed) {
    $http.get('url' + passed).success(function (data) {
        $scope.myObj = data;
    });
}  
  • 0
    У меня есть дополнительная точка, например, $ scope.myObj.something, и когда я пытаюсь это сделать или что-то еще. Что-то не устанавливается :( Есть идеи?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню