Подтвердить что ты не робот

Angular Получить контроллер от элемента

Есть ли способ найти контроллер для элемента через консоль Chrome? Я могу получить ссылку на компонент, выбрав элемент в панели элементов и используя

var c = angular.element($0);

c имеет свойство controller (выглядит как конструктор), но я не уверен, что с этим делать. Есть ли способ найти здесь имя контроллера?

4b9b3361

Ответ 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()