如何从Angular JS中的另一个控制器成功回调中调用控制器的服务

时间:2015-04-19 18:50:29

标签: angularjs http callback controller angularjs-service

我是角色的新手,我仍然按照教程和东西来解决问题。我需要以下帮助。 我有一个看起来像这样的控制器。

app.controller('ScheduleBooking', ['$http', function($http){
    var schedule = this;
    schedule.databooking = [];

    $http.post('../getbookings.json').
        success(function(data, status, headers, config) {
            schedule.databooking = data;
        }).
        error(function(data, status, headers, config) {
            console.log('failed');
        });

}]);

一个控制器,它调用$ http服务来获取预订列表,在HTML中我用ng-repeat填充响应。

我有另一个这样的控制器。

app.controller('MakeBooking', ['$http', function($http){
    var makeBooking = this;
//somecode here

    $http.post('../MakeBooking.json?name=burhan').
        success(function(data, status, headers, config) {
            // I WANT TO REFRESH THE LIST OF BOOKINGS.
//I am looking a way to call scheduleBooking controller so that 
//it can make http call and refresh the list of booking in html.
        }).
        error(function(data, status, headers, config) {
            console.log('failed');
        });

}]);

所以场景是:当页面加载客户应该看到他已经完成的所有预订。当他预订时,会调用http服务进行预订,并且在此服务成功回拨中我想做一些事情,以便它可以通过调用Schedule预约控制器中定义的http服务来刷新预订列表。 也许我可以用BROADCAST和ON方法做到这一点。但我不确定。我已经在JQuery编写的应用程序中发生了很多类似的事情。 做这个的最好方式是什么?可能是我完全错了,还有其他更好的办法。 你们有什么建议?

2 个答案:

答案 0 :(得分:1)

由于ScheduleBooking似乎没有比调用端点做更多的事情,最好的方法是将其转换为服务并在每个控制器中注入此服务,您需要调用特定方法(或从中获取数据),如下所示:

app.factory('ScheduleBookingSerice', ['$http', function($http){

    var schedule = this;

    schedule.getBookings = function(callback){$http.post('../getbookings.json').
        success(function(data, status, headers, config) {
            callback(data);
        }).
        error(function(data, status, headers, config) {
            console.log('failed');
        });
    }   
    return schedule;
}]);


app.controller('MakeBooking', ['$http', 'ScheduleBookingSerice', function($http, ScheduleBookingSerice){
    var makeBooking = this;
//somecode here

    $http.post('../MakeBooking.json?name=burhan').
        success(function(data, status, headers, config) {
            ScheduleBookingSerice.getBookings(function success(data){
            //operate on your data here
            });
        }).
        error(function(data, status, headers, config) {
            console.log('failed');
        });

}]);

答案 1 :(得分:0)

@kmdsax答案解决了我的问题。在控制器2中添加手表有效!

在这篇文章中查看Kmdsax答案。

How can I pass some data from one controller to another peer controller