Angular UI: Неизвестный провайдер: dialogProvider

Я пытаюсь воспроизвести следующий пример простого диалогового окна Angular UI с кнопкой закрытия. 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, поскольку я довольно плохо знаком с этим языком, но это кажется совершенно правильным, когда я смотрю на скомпилированный вывод.


person nip3o    schedule 25.04.2013    source источник


Ответы (3)


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

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

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

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

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

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

person Kristofer Sommestad    schedule 13.06.2013
comment
не уверен, почему за вас проголосовали - это правильный ответ. Ответ Рето неверен. - person mackmack; 15.06.2013
comment
Невероятно полезно. Большое спасибо! - person Hagen; 02.07.2013

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

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

Плункер

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

... ['$scope', '$dialog', (myscope, mydialog) -> ...
person Reto Aebersold    schedule 28.05.2013
comment
это неправильно. $dialog — это угловой инжектор пользовательского интерфейса, а диалог — это одноэлементный объект текущего диалога. ['$scope', '$dialog', (myscope, mydialog) также не имеет смысла, потому что эта конструкция используется только для того, чтобы избежать проблем с минификацией. см. ответ Кристофера для возможного решения. - person mackmack; 15.06.2013

Кристофер Сомместад здесь. но у меня возникла та же проблема. Проблема заключалась в том, что какая-то более старая версия ui-bootstrap-tpls (например, версия 0.11.0) не поддерживает $dialog. Поэтому использовал новую версию ui-bootstrap-tpls.

person Mukund Kumar    schedule 01.12.2014