Angular Получить контроллер от элемента
Есть ли способ найти контроллер для элемента через консоль Chrome? Я могу получить ссылку на компонент, выбрав элемент в панели элементов и используя
var c = angular.element($0);
c
имеет свойство controller
(выглядит как конструктор), но я не уверен, что с этим делать. Есть ли способ найти здесь имя контроллера?
Ответы
Ответ 1
Если вы выполняете angular.element($0).scope()
или просто $scope
(если вы установили расширение Batarang Chrome), вы должны иметь возможность получить доступ к функциям и свойствам выделенных элементов. Это должно также включать любые функции/атрибуты, которые контроллер обнаружил в области.
Невозможно получить имя контроллера.
Ответ 2
Предполагая, что вы не используете анонимные функции для контроллера, вы можете использовать что-то вроде этого:
angular.element(element).controller().constructor.name
codepen - http://codepen.io/jusopi/pen/jWYWzv?editors=101
Как минимум, из Angular 1.2.27, по их документации вы можете это сделать. Посмотрите раздел "Метод экстрасети JQLite" - https://docs.angularjs.org/api/ng/function/angular.element
Ответ 3
Как уже указывал @jusopi, вы можете использовать дополнительные методы jqLite angular.element(element).controller(componentName)
:
[It] получает контроллер текущего элемента или его родителя. По умолчанию получает контроллер, связанный с директивой ngController. Если имя указано как имя директивы camelCase, то контроллер этой директивы будет извлечен
Если вы указываете название директивы/компонента в camelCase, вы также можете получить определенные контроллеры всех директив/компонентов в выбранном элементе:
angular.element($0).controller('MyComponent')
($ 0 относится к самому последнему выбору в инспекторе элементов)
Ответ 4
Это работает с Angular 1.5 компонентами
Предполагая, что у вас есть компонент с именем ProductViewComponent
, который обрабатывается с помощью ProductViewController
, то получение этого контроллера легко:
angular.element("product-view").controller("productView")
Примечания
- Обратите внимание на строчные буквы и тире в имени элемента
- и нижний регистр, а суффиксу "Контроллер" в тексте контроллера
<сильные > Примеры
Теперь вы можете играть с ним, например, вызвать методы:
angular.element("product-view").controller("productView").hasProducts();
Или вызывать действия!
angular.element("product-view").controller("productView").products = [ 'abc' ]
angular.element("product-view").scope().$apply()