Проблема с изолированной областью действия и «заменить: правда» в угловой директиве

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

У меня есть директива ng-if и ng-class как часть шаблона директивы, но выражение в директиве ng-class всегда, казалось, возвращало пустую строку, если только:

Я удалил директиву ng-if.или я удалил ключ замены в объекте определения директивы.

Глядя на скомпилированный вывод для моей директивы, похоже, что создается изолированная область видимости, если удален ключ ng-if или replace, но если они оба оставлены, то в классе нет классов ng-isolate-scope. вывод html, просто ng-scope.

Мне бы очень хотелось понять, что именно здесь происходит, и буду благодарен за любые объяснения.

Директива Определение

angular.module('myMessages')
.directive('pageMessages', function() {

    return {
        restrict: 'E',
        replace: true,
        scope: {
            messages: '='
        },
        controller: function($scope) {
            $scope.severity = 'alert-success';
        },
        template: '<div ng-if="messages.length > 0">' +
                    '<div class="alert" ng-class="severity">' + 
                        '<ul>' + 
                            '<li ng-repeat="m in messages">{{::m.message}}</li>' +
                        '</ul>' +
                    '</div>' +
                  '</div>'
    };
});

Вывод (обратите внимание, класс опасности не добавлен)

<!-- ngIf: messages.length > 0 -->
<div ng-if="messages.length > 0" messages="messages" class="ng-scope">
    <div class="alert" ng-class="severity">
        <ul>
        <!-- ngRepeat: m in messages -->
            <li ng-repeat="m in messages" class="ng-binding ng-scope">test error</li>
        <!-- end ngRepeat: m in messages --></ul>
    </div>
</div>
<!-- end ngIf: messages.length > 0 --></div>

класс оповещения об опасности добавляется после удаления замены (также будет работать удаление ng-if)

<page-messages messages="messages" class="ng-isolate-scope">
    <!-- ngIf: messages.length > 0 -->
    <div ng-if="message,s.length > 0" class="ng-scope">
        <div class="alert alert-danger" ng-class="severity">
            <ul>
            <!-- ngRepeat: m in messages -->
                <li ng-repeat="m in messages" class="ng-binding ng-scope">test error</li>
            <!-- end ngRepeat: m in messages -->
            </ul>
        </div>
    </div>
    <!-- end ngIf: messages.length > 0 -->
</page-messages>

Ответы на вопрос(2)

Ваш ответ на вопрос