Angular Пользовательский интерфейс: Неизвестный поставщик: dialogProvider

Я пытаюсь реплицировать следующий пример пользовательского интерфейса Angular простого диалога с помощью кнопки закрытия. https://github.com/angular-ui/bootstrap/blob/master/src/dialog/README.md. Тем не менее, я не могу получить параметр dialog, который должен быть правильно введен в мой контроллер диалога.

Контроллеры выглядят ниже (используя CoffeScript)

angular.module('myApp', ['ui.bootstrap'])

angular.module('myApp').controller 'MyController', ($dialog, $scope) ->
  $dialog.dialog().open('dialogTemplate', 'DialogController')

angular.module('myApp').controller 'DialogController', ['$scope', 'dialog', ($scope, dialog) ->
    $scope.close = -> dialog.close()
]

Смотрите Plunker для живой версии: http://plnkr.co/edit/ejKh7w8Sk9H7Nz3rXhdc?p=preview

Angular дает следующую ошибку:

Unknown provider: dialogProvider <- dialog

Любые идеи о том, как dialog -параметр может быть введен в DialogController, как видно из примера документов, упомянутого выше? Я подозреваю, что это может иметь какое-то отношение к CoffeeScript, так как я довольно новичок в этом языке, но это кажется совершенно правильным, когда я смотрю на скомпилированный вывод.

Ответы

Ответ 1

У меня была аналогичная проблема, и я пытался найти решение.

Я ожидал два дополнительных аргумента для моего контроллера; ..., selectedView, dialog). Казалось, что мой диалог содержит правильные аргументы, но у меня все еще есть ошибка в консоли.

Проблема заключалась в том, что я дважды ссылался на контроллер;

  • При открытии моего диалога: dialog.open('template', 'myController')
  • В моем template файле: section(ng-controller='myController')

Удаление (2) разрешило проблему, поскольку код не был вызван кодом диалога, который предоставил мой аргумент selectedView и аргумент dialog по умолчанию.

Надеюсь, что это поможет кому-то.

Ответ 2

Поставщик диалога называется $dialog (s. dialog.js). Поэтому вы должны назвать введенное значение $dialog, как вы сделали правильно в MyController.

angular.module('myApp').controller 'DialogController', ['$scope', '$dialog', ($scope, $dialog) ->
  $scope.close = -> dialog.close()
]

Plunker

Примечание. Когда вы определяете свои зависимости как строки, аргументы контроллера можно назвать по своему усмотрению:

... ['$scope', '$dialog', (myscope, mydialog) -> ...

Ответ 3

Kristofer Sommestad находится прямо здесь. но у меня такая же проблема. Проблема была в старой версии ui-bootstrap-tpls (например, версии 0.11.0) не поддерживает $dialog.so использует новую версию ui-bootstrap-tpls.