Как перенаправить из сервиса на контроллер с данными ответа в angularjs?

0

Мне нужна помощь, и я новичок в angularjs.

Я создал приложение для туров. Здесь у меня есть три контроллера для каждой страницы и одна служба для получения данных из ответа.

У меня есть четыре кнопки (ссылки выглядят как испанский, французский, индийский, американский и т.д.) На моем нижнем колонтитуле.

Моя проблема заключается в том, что при нажатии на кнопку местоположения на главном контроллере (packageController) я могу получить доступ к данным ответа без перенаправления, потому что это тот же самый контроллер, но у меня есть другие страницы, у которых есть контроллер 1 и 2, от этого контроллера мне нужно для перенаправления на главный контроллер, но я не могу этого добиться.

приложение:

var app = angular.module("dashboard");

Обслуживание:

app.factory('packageService',function($http) {
    return {
        getData: function (location) {
            var promise = $http({
                method:'GET',
                url:"index.php/tours" ,
                params:{'keyword': location}
            })
                .success(function (data, status, headers, config) {
                    return data;
                })
                .error(function (data, status, headers, config) {
                    return {"status": false};
                });
            return promise;
        }
    }
});

Главный контроллер: это работает

app.controller("packageController", function($scope, packageService){
    $scope.footerLink = [
        link1 : paris,
        link2 : india,
        link3 : america
    ];

   $scope.goBtn = function(search){            
        packageService.getData(search.location).then(function(promise){
            $scope.packages = promise.data;
        });
    };

}

Контроллер 1

Если я нажимаю на одну из этих ссылок goBtn() колонтитула с моего сайта, я goBtn(), но не перенаправляет.

app.controller("hotelController", function($scope, packageService){
    $scope.footerLink = [
        link1 : paris,
        link2 : india,
        link3 : america
    ];

    $scope.goBtn = function(search){            
        packageService.getData(search.location).then(function(promise){
            $scope.packages = promise.data;
        });
    };

}

Контроллер 2

app.controller("flightController", function($scope, packageService){
    $scope.footerLink = [
        link1 : paris,
        link2 : india,
        link3 : america
    ];

    $scope.goBtn = function(search){            
        packageService.getData(search.location).then(function(promise){
            $scope.packages = promise.data;
        });
    };
}

Для подпрограммы потока страниц, пожалуйста, см. Это ниже.

Изображение 174551

Примечание: Возможно, мой подход будет неправильным, пожалуйста, помогите мне!

Теги:

1 ответ

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

Попробуйте передать службу как зависимость также контроллерам, если это не сработает, попробуйте решить ее, как описано ниже:

Я столкнулся с той же проблемой. Я решил это так:

Я создал модули для каждого модуля, каждый модуль имел в нем контроллер. Модуль первой страницы содержал сервис. Чтобы использовать ту же службу в разных контроллерах, я передал первый модуль (который содержит службу) как зависимость в других модулях, а затем передал службу первого модуля как зависимость в контроллере и как аргумент в функции контроллер.

Поэтому в основном у меня был отдельный файл Javascript для каждой страницы с модулем, содержащим контроллер с основным модулем и службой, переданными в качестве зависимостей.

Сделайте первый модуль:

var app = angular.module('Dashboard', ['ngRoute']);

Сделайте первый контроллер таким же образом.

Сделайте сервис таким же образом:

    app.service('packageService', ['$rootScope','$http', function($rootScope, $http){
    this.getPackageData=function(){
           ...
           return...
    };
}]);

Создайте другой модуль для второго контроллера и передайте первый модуль (Dashboard) в качестве зависимости:

var app2 = angular.module('SecondPagemodule', ['ngRoute', 'Dashboard']);

Сделайте контроллер во втором модуле и передайте службу как зависимость и в качестве параметра функции контроллера.

    app2.controller('ControllerForSecondPage', ['$scope', '$http', 'PackageService', function($scope, $http, PackageService){

           ...
           ...
}]);

Надеюсь, это поможет.

  • 0
    Спасибо! Я создал все функциональные возможности в одном модуле. Если я хочу изменить, как ваш подход сейчас большая задача для меня! Есть что-нибудь простое?
  • 0
    Вы пытались добавить свой сервис в качестве зависимости в вашем контроллере. app.controller('controllername', ['Packageservice', function(packageservice){}]);
Показать ещё 1 комментарий

Ещё вопросы

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