или другими словами: как я могу остановить/уничтожить директиву, когда контроллер 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')])
Как я уже упоминал, похоже, что эта директива работает всегда, независимо от того, активна ли эта страница или пользователь изменил маршрут на другую страницу. Как я могу это исправить?