Угловая модальная директива - проблема, когда на странице больше 1

0

Я сделал модальную директиву для своего углового приложения.

modal-directive.js

'use strict';

backyApp.directive('appModal', function() {
    return {
        restrict: 'A',
        transclude: true,
        link: function($scope, elem, attr){
            $scope.modalClass = attr.appModal;
        },
        scope: '@',
        templateUrl: './components/modal/modal.html'
    };
});

и шаблон выглядит следующим образом: (modal.html)

<!-- Modal -->
<div class="app-modal" ng-class="modalClass">
    <div ng-transclude></div>            
</div>

Теперь давайте предположим, что у нас есть 2 модала на странице:

<div app-modal="firstModal">
    <div class="form-group">
            <input type="text"  />
            <input type="submit" value="Submit" />
        </div>
    </div>
</div>

<div app-modal="secondModal">
    <div class="form-group">
            <input type="text"  />
            <input type="submit" value="Submit" />
        </div>
    </div>
</div>

Проблема: у меня есть 2 модала, имеющих один класс (в моем примере выше, secondModal будет прикреплен к secondModal моим модалам)

Почему это происходит? Мне нужно, чтобы моя директива была привязана к каждому модальному моменту, потому что это единственный способ открыть тот, который я хочу.

Я знаю, что это ужасное объяснение. Дайте мне знать, если у вас есть какие-либо вопросы

Редактировать:

Я хочу иметь 2 app-modal divs, каждый из которых имеет свою директивную ценность как класс, прикрепленный к нему. Надеюсь, теперь это станет более ясным.

  • 0
    Что такое scope: '@', ,? Попробуйте удалить его
  • 0
    Я уже в состоянии передать значения firstModal и secondModal . В конце мне нужно два app-modal имеющие каждое из значений моей директивы.
Показать ещё 3 комментария
Теги:
directive

1 ответ

2

Используйте изолированную область действия в директиве

backyApp.directive('appModal', function() {
 return {
    restrict: 'A',
    transclude: true,
    link: function($scope, elem, attr){
        $scope.modalClass = attr.appModal;
    },
    scope: {},
    templateUrl: './components/modal/modal.html'
 };
});

Вот плункер, который я сделал для этого https://embed.plnkr.co/UwjBIqTh5fNlAcbIs6TS/

  • 0
    Вы уже решили проблему дублирования классов! благодарю вас! У меня есть только одна нерешенная проблема. Я пытался отредактировать ваш планкер - но я не знаю, как сохранить, поэтому я объясню: давайте обернем наш первый div form-group в первый модал формой, и при отправке я хочу предупредить значение ввода текст там. Как я могу получить доступ к этому? (Я ранее полагался на '@' для этого.) Мне нужно получить доступ к текстовым полям моего модального режима из моего основного контроллера

Ещё вопросы

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