Локальные диалоговые окна Angular Material md выдают ошибку неизвестного поставщика

#angularjs #angular-material #mddialog

#angularjs #angular-material #mddialog

Вопрос:

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

То, что я пробовал до сих пор, заключается в следующем —

 $mdDialog.show({
                controller: 'SignInModalController',
                templateUrl: 'views/partials/signin_modal.html',
                targetEvent: ev,
                size: 'sm',
                parent: angular.element(document.body),
                locals: {
                    "login_cookies": cookies
                }
            })
  

Я пытаюсь передать этот локальный объект модальному контроллеру входа, который имеет следующий код — >

 app.controller('SignInModalController', ['$scope', '$stateParams', '$location', '$mdDialog', 'Auth', '$mdToast', 'login_cookies',
    function($scope, $stateParams, $location, $mdDialog, Auth, $mdToast, login_cookies) {
  

и после этого я получаю следующее сообщение об ошибке в консоли — >

 Error: [$injector:unpr] Unknown provider: login_cookiesProvider <- login_cookies <- SignInModalController
http://errors.angularjs.org/1.4.3/$injector/unpr?p0=login_cookiesProvider%20<- login_cookies%20<- SignInModalController
  

Также файл модального контроллера входа в систему лениво загружается во время начальной загрузки приложения angular следующим образом — >

 .state('app', {
                        abstract: true,
                        url: '/app?feedback',
                        views: {
                            '': {
                                templateUrl: 'views/layout.html'
                            },
                            'aside': {
                                templateUrl: 'views/aside.html'
                            },
                            'content': {
                                templateUrl: 'views/content.html'
                            }
                        },
                        resolve: load([
                            'scripts/google_analytics.js',
                            'scripts/controllers/app/aside.js',
                            'scripts/controllers/app/navbar.js',
                            'scripts/controllers/app/reach_us.js',
                            'scripts/controllers/app/labs/filter.ctrl.js',
                            'scripts/controllers/app/signin_modal.js',
                            'scripts/controllers/app/feedback.js'])
                    })
  

Какие еще вещи я должен проверить, чтобы устранить эту ошибку?

Обновить

При установке точки останова в контроллере диалогового окна, как только я открываю диалоговое окно, я получаю следующий результат —

отладка

Как вы можете видеть, переданный массив ( list_cookies ) действительно имеет значение, и все же в консоли я получаю эту ошибку —

консоль

Есть предложения?

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

1. Вы пробовали удалять кавычки: locals: { login_cookies: cookies } ?

2. Да, но это тоже не помогает

3. Одной из наших зависимостей в вашем SignInModalController является login_cookies. Вы объявили это где-нибудь еще в своем приложении? Именно на это жалуется сообщение неизвестного поставщика.

4. Вы когда-нибудь находили ответ на это?

5. Да, у меня был один и тот же контроллер, объявленный в двух состояниях с разными параметрами, поэтому, когда регистрировался второй контроллер, он выдавал ошибку

Ответ №1:

Поскольку я не могу прокомментировать последний комментарий deadman, это скорее продолжение того, как он определил / решил проблему.

Попробуйте удалить ng-controller в теге md-dialog. Я думаю, это потому, что при вызове $ mdDialog.покажите, что вы передали провайдеров, в данном случае, местных жителей. Однако, если у вас есть ng-controller в теге md-dialog, он объявляется без контекста локальных файлов.

Ответ №2:

Я думаю, проблема в том, что вы хотите внедрить dialogLocals в свой SignInModalController , а затем получить доступ к login_cookies as dialogLocals.login_cookies .

Итак, измените:

 app.controller('SignInModalController', ['$scope', '$stateParams', '$location', '$mdDialog', 'Auth', '$mdToast', 'login_cookies', function($scope, $stateParams, $location, $mdDialog, Auth, $mdToast, login_cookies) {
  

Для:

 app.controller('SignInModalController', ['$scope', '$stateParams', '$location', '$mdDialog', 'Auth', '$mdToast', 'dialogLocals', function($scope, $stateParams, $location, $mdDialog, Auth, $mdToast, dialogLocals) {
  

Затем получите доступ из вашего SignInModalController как:

 dialogLocals.login_cookies
  

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

1. Когда я пытаюсь в качестве вашего ответа, я получаю Unknown provider: dialogLocalsProvider <- dialogLocals <- myController ошибку. Также я не смог найти ничего, связанного с вашим ответом в документах . Это проблема с версией? Если да, пожалуйста, укажите свою версию и, если возможно, поделитесь ссылкой на документацию.