Как проверить, находится ли мой контроллер AngularJS внутри формы
У меня есть контроллер, который я повторно использую в двух разных местах, но я хочу, чтобы контроллер мог различать, используется ли он на странице, которая редактирует данные, или на странице, которая просто отображает данные. Разница здесь в том, что на одной странице контроллер расположен внутри <... ng-form="someForm">
тег.
(На самом деле, это частичный HTML-файл, который включается; контроллер находится внутри этого частичного)
Можно ли определить, находится ли контроллер внутри формы? Если так, то как?
2 ответа
Я узнал, что мог бы создать директиву, которая необязательно требует form
(не ng-form
) и что вы можете проверить, присутствует ли он в функции ссылки.
someAngularModule
.directive('formAware', [function(){
return {
require: '^?form',
template: ' <div>{{isPartOfForm ? "Inside the form" : "Outside of the form"}}</div>',
link: function(scope, element, attrs, formCtrl) {
scope.isPartOfForm = (formCtrl !== null);
}
}
}]);
Директива может быть размещена внутри ng-формы (с отображением текста "Внутри формы"):
<div ng-form="myForm">
<div form-aware></div>
<div>
или без ng-формы (отображается текст "За пределами формы"):
<div>
<div form-aware></div>
<div>
Я не смог найти какой-либо быстрый способ выполнить ваше требование, но одну вещь, которую вы можете сделать, это определить переменную в $rootScope для отслеживания поведения контроллера. Каждый раз, когда представление загружается с контроллером, оно вызывает свою функцию define в файле javascript.
Таким образом, идея в том, что в $rootScope вы будете определять флаг, загружен ваш требуемый контроллер или нет. Затем вы можете проверить флаг, чтобы узнать, загружен он или нет. Также вы можете использовать $ watch на флаге, чтобы получить уведомление, когда он был загружен. Дайте мне знать, если какая-то часть неясна.
Благодарю.