Вызов функции главного контроллера из модального контроллера — AngularJS

#javascript #angularjs #angularjs-scope

#javascript #angularjs #angularjs-область

Вопрос:

Краткое описание проблемы
Я хочу вызвать функцию getCost, присутствующую в главном контроллере, из модального контроллера.
Ниже приведен псевдокод для объяснения проблемы.

Я открываю модальный диалог следующим образом:

 ....
//I want to invoke this getCost function from the Modal Controller
//So i pass it via 'resolve'
      $scope.getCost = function() {
            return i*x y;//calculates and returns some cost
       }

        $modal.open({
             templateUrl: '/html/MyModal.html',
             controller: MyModalCtrl,
             resolve: {
            getCostNow: function () {
                return $scope.getCost;
             }
         }
        });
.....
 

И в MyModalCtrl это похоже:

 var MyModalCtrl = function($scope, $modalInstance, $http, getCostNow) {


 function updateOrder()
  {
     //Trying to invoke getCost function reference here
     //But this does not work.
     var theCurrentCostIs = getCostNow();
  }
}
 

Ответ №1:

Попробуйте это (обратите внимание на область действия: $scope):

 $modal.open({
    templateUrl: '/html/MyModal.html',
    controller: MyModalCtrl,     
    scope:$scope,
    resolve: {
        getCostNow: function () {
           return $scope.getCost;
        }
    }
});
 

Затем вы можете использовать прослушиватели событий для отправки события:

 $scope.$emit(name, args);
 

И в родительском прослушивании события:

 $scope.$on('eventName', function(event, data) { console.log(data); });