#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. Я добавил его в контроллер, чтобы лучше видеть.