Привязка диалогового окна к моему угловому контроллеру

Я пытаюсь привязать модальный диалог MetroUI к свойству углового контроллера. Таким образом, я могу показать и скрыть диалог, используя привязку.

ДИРЕКТИВА

appMod.directive('showDialog', ['$timeout', function ($timeout): ng.IDirective {
    return {
        restrict: 'A',
        link: function (scope, element, attrs, ngModel) {
            scope.$watch(attrs.showDialog, function (value) {
                if (value) {
                    element.show();
                }
                else {
                    element.hide();
                }
            });
        }
    }
}]);

HTML:

<div class="padding20 dialog" id="dialog9" 
     data-role="dialog" data-close-button="true"
     data-overlay="true" data-overlay-color="op-dark" 
     show-dialog="vm.isDialogVisible">

Таким образом, я могу управлять открытием диалога, установив логическое значение vm.isDialogVisible на моем контроллере.

Проблема в том, что я пытаюсь обновить атрибут vm.isDialogVisible, когда пользователь закрывает диалог (с помощью кнопки закрытия). У кого-нибудь есть идеи, как это исправить?

1 ответ

Всегда круто найти собственное решение (заняло у меня день:-)). Я сделал ошибку, чтобы использовать функции отображения / скрытия элемента. Я должен был использовать атрибут данных элемента. Таким образом, я могу получить доступ к

onDialogClose

функция, которая позволяет мне обновить область. Ниже моего решения

appMod.directive(showDialog,  ['$timeout','$parse',function ($timeout, $parse){
    return {
        restrict: 'A',
        scope:false,
        link: function (scope, element, attrs) {    
            var e1 = theDialog.data('dialog');

            $timeout(() => {
                e1.options.onDialogClose = (dialog) => {
                    var model = $parse(attrs.showDialog);
                    model.assign(scope, false);
                    scope.$digest();
                };
            }, 0);

            scope.$watch(attrs.showDialog, function (value) {
                if (value) {
                    e1.open();
                }
                else {
                    e1.close();
                }
            });
        }
    }
}]);
Другие вопросы по тегам