AngularJS: как разрешить/включить директиву, когда контроллер X активен?

или другими словами: как я могу остановить/уничтожить директиву, когда контроллер X больше не активен?

Мне нужна эта функция, чтобы я мог предотвратить «запуск» директив при маршрутизации на другую страницу. Изучал вашу документацию, но не смог найти ответ на этот простой вопрос.

Вот код HTML/Jade директивы:

doctype html
html(data-ng-app="videomailApp")
    body
        main(data-ng-view, data-ng-cloak)
            h2 Changelog
            ul#changelog(data-ng-highlightVersion)
                each version, i in versions
                    li(id=version.number)
                        h3
                            a(href="#" + version.number) Version #{version.number}
                            if i === 0
                                | [current]
                        | !{version.changelog}

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

module.exports = function($location) {
    return function($scope, $element) {

        var versions   = $element.children(),
            onClass    = 'current',
            versionMap = {},

            $currentVersion,
            $version,
            i

        for (i = 0; i < versions.length; i++) {
            $version = angular.element(versions[i])
            versionMap[$version.attr('id')] = $version
        }

        /*
            Problems to solve:
            - how can i enable this directive only when on that page?
            - the event below is not fired on page load
            - if nothing works, consider moving all that to the controller which is much easier
        */

        $scope.$on('$routeChangeStart', function() {
            var id = $location.hash()

            var $version = versionMap[id]

            if ($version) {
                if ($currentVersion)
                    $currentVersion.removeClass(onClass)

                $currentVersion = $version
                $currentVersion.addClass(onClass)
            }
        })
    } }

Я загружаю директиву в main.js с помощью этого

app.directive('highlightVersion', ['$location', require('./directives/highlightVersion')])

Как я уже упоминал, похоже, что эта директива работает всегда, независимо от того, активна ли эта страница или пользователь изменил маршрут на другую страницу. Как я могу это исправить?


person Michael Heuberger    schedule 09.08.2014    source источник
comment
Вы видите какую-то конкретную проблему? Время жизни директивы тесно связано со временем жизни представления контейнера.   -  person metacubed    schedule 09.08.2014
comment
Вы пишете пользовательскую директиву и хотите уничтожить ее при переходе на другой маршрут?   -  person runTarm    schedule 09.08.2014
comment
Да @runTarm это то, что я хочу.   -  person Michael Heuberger    schedule 10.08.2014
comment
@metacubed интересно - есть ли пример, демонстрирующий время жизни пользовательской директивы?   -  person Michael Heuberger    schedule 10.08.2014


Ответы (1)


Вы можете просто использовать атрибут ng-if, который удалит/создаст dom.

https://docs.angularjs.org/api/ng/directive/ngIf

person Blaskovicz    schedule 09.08.2014
comment
Я не понимаю, как это может помочь с моей директивной проблемой. - person Michael Heuberger; 10.08.2014