2013-04-25 14 views
15

Ich versuche, das folgende eckige UI-Beispiel eines einfachen Dialogfelds mit einer Schließen-Schaltfläche zu replizieren. https://github.com/angular-ui/bootstrap/blob/master/src/dialog/README.md. Allerdings kann ich nicht den dialog Parameter richtig in meinen Dialog-Controller injiziert bekommen.Angular UI: Unbekannter Provider: dialogProvider

Der Controller sieht unten wie (unter Verwendung von Coffeescript)

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() 
] 

Siehe Plunker für eine Live-Version: http://plnkr.co/edit/ejKh7w8Sk9H7Nz3rXhdc?p=preview

Angular gibt mir die folgende Fehlermeldung:

Unknown provider: dialogProvider <- dialog 

Irgendwelche Ideen auf, wie der dialog -Parameter in DialogController injiziert werden konnte, wie in t gesehen wird Er hat das oben erwähnte Beispiel? Ich vermute, das könnte etwas mit CoffeeScript zu tun haben, da ich mit dieser Sprache ziemlich neu bin, aber es scheint ziemlich richtig zu sein, wenn ich mir die kompilierte Ausgabe anschaue.

Antwort

17

Ich hatte ein ähnliches Problem und rang nach finde eine Lösung.

Ich erwartete zwei zusätzliche Argumente für meinen Controller; ..., selectedView, dialog). Es schien meinen Dialog mit den richtigen Argumenten zu versorgen, aber ich bekam immer noch einen Fehler in der Konsole.

Das Problem war, dass ich den Controller zweimal referenzierte;

  1. Wenn mein Dialog öffnen: dialog.open('template', 'myController')
  2. In meiner template Datei: section(ng-controller='myController')

Entfernen (2), um das Problem gelöst, da das nicht durch den Dialog Code aufgerufen wurde, die meine selectedView bereitgestellt Argument und das Standardargument .

Hoffe, dass jemand hilft.

+1

nicht sicher, warum Sie downvoted wurden - das ist die richtige Antwort. Reto's Antwort ist falsch. – mackmack

+0

Gut erklärt! – mthmulders

+0

Unglaublich nützlich. Danke vielmals! – Hagen

0

Der Dialoganbieter heißt $dialog (s. dialog.js). So müssen Sie den injizierten Wert $dialog wie Sie richtig in MyController benennen.

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

Plunker

Hinweis: Wie definieren Sie Ihre Abhängigkeiten, da die Controller Argumente Strings genannt werden können, wie Sie möchten:

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

das ist nicht korrekt. $ dialog ist der Winkel-ui-Injektor, dialog ist das Singleton-Objekt des aktuellen Dialogs. ['$ scope', '$ dialog', (myscope, mydialog) macht auch keinen Sinn, weil diese Konstruktion nur verwendet wird, um Verfälschungsprobleme zu vermeiden. siehe Kristofer die Antwort für eine mögliche Lösung. – mackmack

0

Kristofer Sommestad ist hier richtig. aber ich habe das gleiche problem.problem war eine ältere version von ui-bootstrap-tpls (wie version 0.11.0) unterstützt nicht $dialog .so verwendete neue version von ui-bootstrap-tpls.

Verwandte Themen