我正在开发angularjs应用程序。我的js中有多个角度控制器。我想从另一个角度控制器调用角度控制器。 请找到下面的代码。我想通过从myControllerTwo传递sid和zone值来调用myControllerTwo中的myControllerOne。任何建议都会有所帮助。
app.controller('myControllerOne',function($rootScope,$scope,$uibModal,MyTestService,sid,zone) {
//MyTestService.getResults() hits the backend code and get the results
MyTestService.getResults(sid,zone).then(
function(response) {
$scope.responseData = response;
//logic
//
})
});
app.controller('myControllerTwo', function ($rootScope,$scope,$uibModal,MyTestService) {
function loadData() {
MyTestService.getServiceDataResults().then(
function (response) {
var cb = function(start, end, label) {
var sid = response.sid;
var zone = response.zone;
$('#reportrange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
//i want to call myControllerOne here by passing sid and zone values for this controller
}
var optionSet1 = {
startDate: moment().subtract(1, 'days'),
endDate: moment().subtract(1, 'days'),
minDate: minDate,
maxDate: maxDate,
dateLimit: {
days: 60
},
showDropdowns: true,
showWeekNumbers: true,
timePicker: false,
timePickerIncrement: 1,
timePicker12Hour: true,
ranges: {
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
},
opens: 'left',
buttonClasses: ['btn btn-default'],
applyClass: 'btn-small btn-primary',
cancelClass: 'btn-small',
format: 'MM/DD/YYYY',
separator: ' to ',
locale: {
applyLabel: 'Submit',
cancelLabel: 'Clear',
fromLabel: 'From',
toLabel: 'To',
customRangeLabel: 'Custom',
daysOfWeek: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
firstDay: 1
}
};
$('#reportrange span').html(moment().subtract(1, 'days').format('MMMM D, YYYY') + ' - ' + moment().subtract(1, 'days').format('MMMM D, YYYY'));
$('#reportrange').daterangepicker(optionSet1, cb);
$('#reportrange').on('show.daterangepicker', function() {
console.log("show event fired");
});
$('#reportrange').on('hide.daterangepicker', function() {
console.log("hide event fired");
});
$('#reportrange').on('apply.daterangepicker', function(ev, picker) {
console.log("apply event fired, start/end dates are " + picker.startDate.format('MMMM D, YYYY') + " to " + picker.endDate.format('MMMM D, YYYY'));
});
$('#reportrange').on('cancel.daterangepicker', function(ev, picker) {
console.log("cancel event fired");
});
})
}
loadData();
});
答案 0 :(得分:2)
如果您需要在不同的控制器之间传递值,请考虑使用服务来保存共享数据,然后将其作为依赖项注入两个控制器。
此外,如果您想要在另一个控制器中使用某个控制器中的功能,那么该功能应该被提升到服务中。在您的示例中,不是使用myControllerTwo
来操作服务返回的响应,而是操纵服务中的响应,然后返回已处理的数据。您甚至可以缓存已处理的数据,以便myControllerOne
可以随时通过调用MyTestService.getResults(sid,zone)
来访问它。然后MyTestService
可以检索结果并将其返回给控制器,所有这些都不会使一个控制器成为另一个控制器的依赖。
你可以access a parent controller from a child controller通过组件的require
属性,但老实说这应该避免,因为它紧密地耦合组件并且可能导致后来的头痛。
答案 1 :(得分:1)
你可以从另一个控制器调用一个控制器吗? 是强>
你应该从另一个调用一个控制器吗? 否强>
可能的解决方案: 无论IAmKale说什么是绝对正确的,这应该是解决方案 因此: