如何在 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
我是 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