Я слушаю $ routeChangeSuccess внутри контроллера:
// In MyController
$scope.$on("$routeChangeSuccess", (a, b, c) => {
console.log(a, b, c);
});
Это прекрасно работает, когда изменение маршрута в результате навигации в пределах приложения, но не всегда при переходе непосредственно к URL в браузере, например/Мой новый-гиперссылка
Производительность зависит от того, где определяется контроллер:
<div ng-controller="MyController"></div>
Если это в основном index.html, кажется, работает каждый раз, однако:
<mydirective ng-controller="MyController"></mydirective>
с:
app.directive('myDirective', function() {
return {
templateUrl: '<SOME_CONTENT>'
}
});
или действительно:
<mydirective></mydirective>
и:
app.directive('myDirective', function() {
return {
controller: "MyController",
templateUrl: '<SOME_CONTENT>'
}
});
Эти последние два слышать только $ routeChangeSuccess около 50% времени - предположительно, из-за какой-то компиляции/переваривать состояние гонки.
Я бы предпочел установить мой контоллер в определении директивы - он опрятен, кажется красиво модульным, и нет лишней разметки. К сожалению, это просто не работает очень часто.
Как примечание стороны: почему я хочу это сделать?
Я борюсь с шаблоном дизайна приложения, которым Angular кажется отказывать играть в мяч. У меня есть несколько отдельных модулей в моем приложении, они все живы в одно и то же время, и я хочу, чтобы они ответили к изменениям URL соответствующим образом.
Я действительно не понимаю, почему этого так трудно достичь. $ routeProvider не очень полезен, потому что у меня может быть только один просмотр/контроллер для каждого маршрута - это здорово, если я хочу создать веб-сайт с одной страницей, но не в том случае, если я пытаюсь создать одностраничное приложение со сложным пользовательским интерфейсом , Плагин ui-router на самом деле не то, что я ищу - это больше о состояниях с дополнительными маршрутами.
Это веб-адрес - ссылка священна! Я хочу почитать его и использовать его как можно больше, и я хочу, чтобы каждый компонент или модуль в моем приложении знал, что он должен делать на основе URL. Я не знаю, почему так сложно с Угловым.
Спасибо за это - я начинаю понимать причины моей проблемы. Я неправильно думаю о структуре своего приложения? Можете ли вы предложить лучший способ сделать то, что я пытаюсь сделать? – user888734
Независимо от того, что загружено внутри 'ng-view', можно считать имеющим срок службы маршрута, на котором он зависит. Если у вас есть количество модулей, которые живы, они не могут быть связаны с просмотром. Это могут быть сервисы n. Может быть, конкретный пример от вас может помочь. – Chandermani