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

How to call controller's service from another controller success call back in Angular JS

我是 angular 的新手,我仍在按照教程和内容来解决问题。我需要以下方面的帮助。 我有一个看起来像这样的控制器。

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 booking controller 中定义的 http 服务来刷新预订列表。 也许我可以用 BROADCAST 和 ON 方法来做到这一点。但我不确定。在我已经 JQuery 编写的应用程序中发生了很多类似的事情。 做这个的最好方式是什么?可能是我完全错了,还有其他更好的方法。 你们有什么建议?

由于 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');
        });

}]);

@kmdsax 的回答解决了我的问题。在控制器 2 中添加一个手表是可行的!

检查此 post 上的 Kmdsax 答案。

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