Вставка параметров в угловую фабрику

0

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

мой контроллер:

friendsApp.controller('friendsController', ['$scope','friendsFactory','secondFactory', function($scope, friendsFactory, secondFactory){

    $scope.girlFriendName = friendsFactory.girlFriend();





    secondFactory.getCity(function(data) {
        $scope.city = data;
        console.log($scope.city[0].Name);
    });

}]);

Моя фабрика:

friendsApp.factory('secondFactory',  function ($http){

    return {
        getCity: function(callback) {
            // HOW TO GET THE VALUE FROM THE CONTROLLER???
            var value = 5;
            $http.get('http://localhost:8888/sqlapi/public/singleapi/' + value).success(callback);
        }
    }

});

Для целей тестирования я написал значение вручную в Factory. Но я не знаю, как вставить его из контроллера. Кто-нибудь может мне помочь? Или подтолкнуть меня в правильном направлении?

  • 0
    Вам необходимо установить значение как заводское свойство. Затем вызовите его из вашего контроллера как secondFactory.value. Попробуйте вернуть {some_value: 5, getCity: function (callback) ...
Теги:

2 ответа

1
Лучший ответ

Вы передадите переменную так же, как и в текущий момент, когда вы выполняете функцию обратного вызова:

контроллер:

secondFactory.getCity(var, function(data) {
    $scope.city = data;
    console.log($scope.city[0].Name);
});

который на вашем заводе будет называться как таковой:

Фабрика:

return {
    getCity: function(var, callback) {
        alert(var);
        $http.get('http://localhost:8888/sqlapi/public/singleapi/' + value).success(callback);
    }
}

Тем не менее, вы должны использовать.success() вместо передачи функции обратного вызова, вернув фабрику весь ваш запрос $ http.

Фабрика:

return {
    getCity: function(var) {
        alert(var);
        return $http.get('http://localhost:8888/sqlapi/public/singleapi/' + value);
    }
}

контроллер:

secondFactory.getCity(var).success(function(data) {
     console.log(data);
});
  • 0
    Огромное спасибо. После всех этих часов я, кажется, больше не вижу никаких решений. Работало нормально. Теперь я наконец могу пойти спать. Спасибо вам большое!
2

Я думаю, что ты немного смущаешься. Просто верните обещание обратно на контроллер:

На вашем заводе:

getCity: function(value) {
  return $http.get('http://localhost:8888/sqlapi/public/singleapi/' + value);
}

Затем в вашем контроллере:

secondFactory.getCity('5').then(function (data) {
    $scope.city = data;
    console.log($scope.city[0].Name);
});
  • 0
    Возможно я не объяснил это правильно. Я хочу, чтобы значение вводилось контроллером. Например, контроллер запрашивает город 5, 6 или 7. Как мне получить номер с контроллера на заводе?
  • 0
    Обновил мой ответ.
Показать ещё 2 комментария

Ещё вопросы

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