#angularjs #angularjs-scope #angularjs-controller
Вопрос:
Я все еще новичок в AngularJS и недавно столкнулся с некоторым кодом, который мне нужно обновить. Мне показалось , что я что-то понял $scope
, но потом я наткнулся на этот контроллер, где есть $scope.value
значение, которое, кажется, имеет значение еще до $scope.item
того, как оно будет создано (и любое значение будет присвоено) в том же контроллере.
Кроме того, я не понимаю, как $scope.showAppointmentDetailInIndex
можно получить доступ к функции с этого контроллера, хотя она определена в другом контроллере.
Чего мне не хватает?
Я понимаю, что AngularJS
сначала необходимо выполнить запрос (через service
или factory
объект), чтобы получить данные из базы данных, а затем сохранить их, $scope.objects
прежде чем они будут доступны внутри целого Controller
и соответствующего DOM-типа HTML
.
Вот что сказано AngularJS Controller
(с двумя примерами, отмеченными комментариями):
angular.module('MyApp').controller('AppointmentsEditController', function(Appointment, Order, Person, $scope,$state,$stateParams){
$scope.data = {
'loadingComplete': false,
'editErrorText':'',
'isSubmitting': false
};
$scope.setEventEditing(true);
Appointment.get({id: $stateParams.id})
.$promise.then(
//success
function(appointment) {
$scope.appointment = appointment;
if($scope.tempAppointment != undefined){
$scope.appointment = $scope.tempAppointment;
$scope.setTempAppointment(undefined);
}
var start_mom = moment(appointment.start)
var end_mom = moment(appointment.end)
if($scope.appointment.allDay){
$scope.appointment.start = start_mom.format('DD-MMM-YYYY');
$scope.appointment.end = end_mom.subtract(1, 'days').format('DD-MMM-YYYY');
}else{
$scope.appointment.start = start_mom.format('DD-MMM-YYYY');
$scope.appointment.end = end_mom.format('DD-MMM-YYYY');
$scope.appointment.startTime = start_mom.format('HH:mm');
$scope.appointment.endTime = end_mom.format('HH:mm');
}
$scope.showAppointmentDetailInIndex($scope.appointment); // <-- how can this function be accessed from here
$scope.data.loadingComplete = true; // while being defined whithin another controller?
}
);
$scope.saveAppointment = function(appointment){$scope.data.editErrorText = '';
angular.forEach($scope.editForm, function(val, key){
if(!key.match(/$/)) {
val.$pristine = false;
}
});
if($scope.editForm.$invalid) {
$scope.data.editErrorText = 'Please fill all marked fields.';
return;
}
if (($scope.generalists.activeIDs.length $scope.instruments.activeIDs.length) == 0){ // <-- where does $scope.generalists come from?
$scope.data.editErrorText = 'Please select at least one sprecialist or instrument.';
return;
}
if (!$scope.selectedAppointment.order){
$scope.data.editErrorText = 'Please select an order from the list on the right.';
return;
}
var editAppointment = angular.copy(appointment);
editAppointment.allDay = $scope.selectedAppointment.allDay;
editAppointment.participantIDs = $scope.generalists.activeIDs;
editAppointment.instrumentIDs = $scope.instruments.activeIDs;
...
...
};
...
});