событие angular $ broadcast не запускается?

#javascript #angularjs

#javascript #angularjs

Вопрос:

Я хочу отправить данные с родительского на дочерний контроллер, но событие не запускается с родительского контроллера, прошло несколько часов, я ломаю голову, чтобы найти проблему, но мне не удалось, поэтому решил обратиться за помощью к stackoverflow, есть идеи, что не так в приведенном ниже коде?

ParentCtrl.js

 angular.module('angularModelerApp')
    .controller('ModelerCtrl', ['$scope', '$state','$log', 'toastr', 'FileSaver', 'Blob', '$uibModal', '$rootScope', '$timeout', function($scope, $state, $log, toastr, FileSaver, Blob, $uibModal, $rootScope, $timeout) {

            $scope.deleteXml = function(id, toast) {
                var id = $scope.diagramObj._id;
                $scope.modalInstance = $uibModal.open({
                    templateUrl: 'app/modeler/modelerDialog/modelerDialog.html',
                    controller: 'ModelerDialogCtrl'
                });
                $timeout(function() {
                    $rootScope.$broadcast('delete-diagram', {
                        id: id
                    });
                });
            }
        });
  

childCtrl.js

 angular.module('angularModelerApp')
  .controller('ModelerDialogCtrl', function ($scope, $uibModalInstance,$log,diagramService,$rootScope) {

    $scope.cancel = function() {
      $uibModalInstance.dismiss('cancel');
    };
    $scope.$on('delete-diagram',function(e,data){
      console.log('in $on',data);
    });
  

Комментарии:

1. Из любопытства, $scope.$parent.$broadcast('delete-diagram', {id: id}); работает?

2. Хм, может быть проблема со временем. Вы пытаетесь передать событие модальному после запроса на его открытие? Если это так, я бы подключился к модалам rendered или opened разрешениям, чтобы вы могли выполнить код после того, как узнаете, что модал был отрисован. $scope.modalInstance.rendered.then(функция () { });

3. @ John F Я использовал ваш подход, он работает, и я вижу данные в дочернем контроллере, но я также вижу ошибку Error: [$injector:unpr] Unknown provider: $uibModalInstanceProvider <- $uibModalInstance <- ModelerDialogCtrl

Ответ №1:

Почему вы не передаете идентификатор при открытии модального, такого как:

 $scope.modalInstance = $uibModal.open({
  templateUrl: 'app/modeler/modelerDialog/modelerDialog.html',
  controller: 'ModelerDialogCtrl',
  resolve: {
    item: function() {
      return $scope.diagramObj._id
    }
   }
 });
  

Извлеките его в дочернем компоненте следующим образом:
angular.module(‘angularModelerApp’)

  .controller('ModelerDialogCtrl', function ($scope, $uibModalInstance,$log,diagramService,$rootScope) {

    $scope.cancel = function() {
      $uibModalInstance.dismiss('cancel');
    };
    $scope.$on('delete-diagram',function(e,data){
      console.log('in $on',data);
    });


    $uibModalInstance.result.then(function (data) {
       console.log(data);
    })
}
  

Комментарии:

1. как я буду отображать идентификатор в дочернем контроллере?

2. я не смог собрать приложение, возникла некоторая проблема с синтаксисом родительского кода в строке : return{id:id}

3. Снова обновлено.. Проверьте сейчас

4. я получил эту ошибку при открытии модального окна Error: [$injector:unpr] Unknown provider: $uibModalInstanceProvider <- $uibModalInstance <- ModelerDialogCtrl

5. Я добавил его в контроллер, чтобы лучше видеть.