функция связывания angularjs не выполняется при наличии контроллера

0

Сейчас я немного смущен. Я написал директиву, которая в основном открывает разные модальности в зависимости от некоторого "статуса". По какой-то причине функция "link" больше не выполняется, она немного назад. Я понятия не имею, когда он прекратил работать. Может быть, некоторые плохо разрешенные конфликты слияния, возможно, некоторые угловые незначительные обновления? Надеюсь, кто-нибудь может помочь или намекнуть мне в правильном направлении.

функция ссылки называется wheren, нет контроллера, иначе он не будет выполнен. Комментирование логики контроллера также не приведет к выполнению ссылки.

<hcd-modal-messages status="status" redirect="app.dashboard.index"></hcd-modal-messages>

директива:

angular
    .module('hcdProtocol')
    .directive('hcdModalMessages', function () {
        return {
            restrict: 'E',
            templateUrl: 'app/protocols/components/modalMessages/modalMessages.html',
            scope: {
                labelSuccess: '@labelSuccess',
                labelProcess: '@labelProcess',
                labelFailed: '@labelFailed',
                labelCached: '@labelCached',
                status: '=status', //values: HIDDEN, PROCESS, SUCCESS, FAIL
                redirect: '=redirect',
                delay: '@redirectDelay' //delay in milliseconds
            },
            controller: ['$scope', '$timeout', '$state', function($scope, $timeout, $state) {
            $scope.processModal = new Foundation.Reveal(
                angular.element(angular.element(".modal-process")[0]),
                {
                    closeOnClick: false
                }
            );
            $scope.successModal = new Foundation.Reveal(
                angular.element(angular.element(".modal-success")[0]),
                {
                    closeOnClick: false
                }
            );
            $scope.failModal = new Foundation.Reveal(
                angular.element(angular.element(".modal-fail")[0]),
                {
                    closeOnClick: true
                }
            );
            $scope.offlineModal = new Foundation.Reveal(
                angular.element(angular.element(".modal-cached")[0]),
                {
                    closeOnClick: false
                }
            );

            $scope.$watch('status', function(status) {
                //close all modals
                $scope.processModal.close();
                $scope.successModal.close();
                $scope.failModal.close();
                //open modal corresponding to current status
                switch(status) {
                    case 'PROCESS':
                        $scope.processModal.open();
                        break;
                    case 'SUCCESS':
                        $scope.successModal.open();

                        if(typeof $scope.redirect !== 'undefined') {
                            //delay redirection
                            $timeout(function () {
                                $state.go($scope.redirect);
                            }, $scope.redirectDelay);
                        }
                        break;
                    case 'OFFLINE_CACHED':
                        $scope.offlineModal.open();

                        if(typeof $scope.redirect !== 'undefined') {
                            //delay redirection
                            $timeout(function () {
                                $state.go($scope.redirect);
                            }, $scope.redirectDelay);
                        }
                        break;
                    case 'FAIL':
                        $scope.failModal.open();
                        break;
                }
            });

            }],
            link: function(scope, element, attrs, controller, transcludeFn) {
                //set default label
                if(typeof attrs.labelProcess == 'undefined') scope.labelProcess = "Creating new protocol";
                if(typeof attrs.labelSuccess  == 'undefined') scope.labelSuccess = "successfully created";
                if(typeof attrs.labelFailed  == 'undefined') scope.labelFailed = "creation failed";
                if(typeof attrs.labelCached  == 'undefined') scope.labelCached = "Created in offline cache";

                scope.redirectDelay = (typeof attrs['redirect-delay']  === 'undefined') ? 3000 : attrs['redirect-delay'];
                scope.redirect = (typeof attrs.redirect === 'undefined') ? false : attrs.redirect;

                //close modals when directive ist destroy to avoid grey (ui blocking) overlay
                scope.$on('$destroy', function() {
                    scope.processModal.close();
                    scope.failModal.close();
                    scope.successModal.close();
                    scope.offlineModal.close();
                });
            }
        }
    });

В настоящее время я использую AngularJS v1.5.3

Мое быстрое исправление: в итоге я включил логику контроллера в свою функцию ссылок. В основном это было там, в первую очередь. поэтому он работает сейчас, так как у меня нет контроллера, но я до сих пор не понимаю, почему контроллер и ссылка не были выполнены в моем случае.

Теги:
angularjs-directive

1 ответ

0

Используйте этот формат

angular
    .module('module')
    .controller('MyCtrl',/*your controller*/)
    .directive('myDirective', function() {
        return {
            require: '^^MyCtrl',
            link: function (scope, el, attrs, MyCtrl) /*....*/
        }
    })
  • 0
    это приводит к тому, что «контроллер 'hcdModalMessagesController', требуемый директивой 'hcdModalMessages', не может быть найден!"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню