如何使用angularjs中的响应数据从服务重定向到控制器?

时间:2015-06-25 13:07:11

标签: javascript angularjs

我需要一些帮助,而且我是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(),但不会重定向。

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;
        });
    };
}

对于页面流程的理解,请参见下图。

enter image description here

注意:我的方法可能会出错,请帮助我!

1 个答案:

答案 0 :(得分:0)

尝试将服务作为依赖项传递给控制器​​,如果不起作用,请尝试解决它,如下所述:

我遇到了同样的问题。我这样解决了:

我为每个页面制作了不同的模块模块,每个模块都有一个控制器。第一页的模块包含该服务。 为了在不同的控制器中使用相同的服务,我将第一个模块(包含服务)作为依赖项传递给其他模块,然后将第一个模块的服务作为控制器中的依赖项传递,并作为参数传递给其他模块。控制器。

所以基本上我为每个页面都有一个单独的Javascript文件,其中一个模块包含一个控制器,主模块和服务作为依赖项传递。

制作第一个模块:

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

以相同的方式制作第一个控制器。

以同样的方式提供服务:

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

为第二个控制器创建一个不同的模块,并将第一个模块(仪表板)作为依赖项传递:

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

将控制器放在第二个模块中,并将服务作为依赖关系和参数传递给控制器​​的功能。

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

           ...
           ...
}]);

我希望这会有所帮助。