如何从浏览器控制台访问组件控制器?
问题描述:
在角度1.x中,当使用ng-controller
时,可以通过检查元素并调用angular.element($0).controller()
从浏览器控制台访问控制器实例。如何从浏览器控制台访问组件控制器?
这并不与组件的工作原理声明:
angular.module('foo').component('bar', {
controller: class {
}
});
是否有任何其他的方式来从控制台访问组件的控制器实例?
答
我们似乎得到访问组件控制器最接近的是:
angular.element($0).scope().$ctrl
答
控制器(名称) - 检索当前元素或 其父的控制器。默认情况下,检索与ngController指令相关的控制器。如果名称是作为camelCase指令 名称提供的,则将检索此指令的控制器(例如, 'ngModel')。
它是angular.element($0).controller('bar')
。
对于分量这可以缩小到
angular.element($0).controller(
$0.tagName.toLowerCase().replace(/-([a-z])/g, (_, c) => c.toUpperCase()))
);
单行。
对于*组件控制器*这不起作用,因为它使用隔离范围。此外,如果组件具有非默认的控制器标识符,则这不起作用。 – estus
@estus这完全符合我的预期。它允许我为DOM中的任何元素找到控制器。是的,它不适用于自定义标识符。但是很简单,就像.controller()一样。 – Natan
这是我的观点。它不适用于任何元素。因为具有继承范围的元素将范围作为'.scope()'暴露。并且组件元素本身将它公开为'.isolateScope()'。 – estus