Значение AngularJS $scope.item в контроллере предварительно определено?

#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;
    ...
    ...

  };
  ...
});