Директива AngularJS не работает внутри ngDialog

0

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

Когда я устанавливаю точку останова внутри кода директивы, он нигде не попадает, просто обходит весь оператор return.

Директива такова:

app.directive('customAccordion', function () {
    console.log("directive!!!");
    return {
        scope: {
            ngModel: '='
        },
        restrict: 'A',
        template: '<div class="panel-group" id="{{panelId}}"><div class="panel panel-default" ng-repeat-start="item in ngModel"><div class="panel-heading"><h4 class="panel-title"><a ng-click="toggleCollapsedStates($index)" href="#{{panelBaseId}}-{{$index}}">{{item.title}}</a></h4></div><div id="{{panelBaseId}}-{{$index}}" data-parent="#{{panelId}}" class="panel-collapse collapse"><div class="panel-body">{{item.content}}</div></div></div><div ng-repeat-end></div></div>',
        link: function (scope, el, attrs) {
            scope.panelBaseId = attrs.collapsePanelBodyId;
            scope.panelId = attrs.collapsePanelId;
            console.log("inside the link property!!");

            $(document).ready(function () {
                console.log("doc ready!!");
                angular.forEach(scope.ngModel, function (value, key) {
                    if (value.collapsed) {
                        $("#" + scope.panelBaseId + "-" + key).collapse('show');
                    }
                });
            });

            scope.toggleCollapsedStates = function (ind) {
                angular.forEach(scope.ngModel, function (value, key) {
                    if (key == ind) {
                        scope.ngModel[key].collapsed = !scope.ngModel[key].collapsed;
                        $("#" + scope.panelBaseId + "-" + ind).collapse('toggle');
                    }
                    else
                        scope.ngModel[key].collapsed = false;
                });
            }
        }
    };
});

Код, вызываемый при нажатии кнопки на странице, чтобы открыть всплывающее окно, выглядит следующим образом:

$scope.showPopup = function (obj) {
        $scope.obj= obj;

        actionsService.actionsAPI().get({ Name: obj.UserName }, function (data) {
            if (data.Success) {
                $scope.currentUserName = userContext.CurrentUserName;
                $scope.collapseData = [];

                data.Contents.forEach(function(action) {
                    $scope.collapseData.push({
                        title: action.Name,
                        content: '<p>' +
                            action.Action_Type_Name +
                            ' - ' +
                            action.FormattedAction_Date +
                            '</p><p>' +
                            action.Formatted_Action_Description +
                            '</p>',
                        collapsed: false
                    });
                });

                ngDialog.open({
                    template: 'Views/popup.html',
                    scope: $scope
                });
            }
            else {
                $scope.message = "Unexpected error: " + data.Message;
            }
        }, function (error) { $scope.message = "Unexpected error: " + JSON.stringify(error.data) });

    }

HTML в шаблоне ngDialog, popup.html, выглядит следующим образом:

<div>
    <h2>{{obj.Name}}</h2>
    {{collapseData}}
    <custom-accordion ng-model="collapseData" collapse-panel-id="collapse-panel" collapse-panel-body-id="collapse-panel-body"/>
</div>

Когда я нажимаю кнопку, появляется всплывающее окно, мое значение obj.Name присутствует, я также могу видеть содержимое collapseData, я пишу это только для проверки того, что данные видны в области. Но пользовательский аккордеон просто появляется, как в всплывающем шаблоне. В любом месте нет ошибок JavaScript, директива просто не отображает.

Буду признателен за любую оказанную помощь. JD

Теги:
angularjs-directive
ng-dialog

1 ответ

0

Решено. У меня было неправильное значение "ограничивать" в настройке директивы... Должен был элемент E для элемента.

Ещё вопросы

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