Javascript 如何从外部访问组件控制器
我用的是Angular 1.5,我有一个像这样的组件Javascript 如何从外部访问组件控制器,javascript,angularjs,angularjs-components,Javascript,Angularjs,Angularjs Components,我用的是Angular 1.5,我有一个像这样的组件 angular .module('appliactionModule') .component('umleditor', { bindings: { ... }, templateUrl: 'app/uml-editor/umleditor.html', contro
angular
.module('appliactionModule')
.component('umleditor', {
bindings: {
...
},
templateUrl: 'app/uml-editor/umleditor.html',
controller: UmlEditorController
});
function UmlEditorController( ... ){ ... };
然后在app/uml编辑器/umleditor.html
中,我希望有一些javascript能够访问控制器umleditor控制器
,如下所示:
<div class="editor-wrapper" id="editor">
...
<script>
// Accessing Services like this works
var FooService = angular.element('*[ng-app]').injector().get("FooService");
// How do I get the controller?
controller.doSomething();
</script>
</div>
...
//访问这样的服务是有效的
var FooService=angular.element('*[ng app]').injector().get(“FooService”);
//如何获取控制器?
controller.doSomething();
如何从外部获取对控制器的引用,以便可以从常规JavaScript(非角度)使用它?如果存在
umleditor
组件,则可以通过以下方式检索控制器实例:
angular.element(document.getElementById("editor")).controller('umleditor');
或
这被认为是一种不好的做法,应该在测试中使用,或者作为一种快速修复方法。通常,必须做相反的事情,外部JS代码应该用Angular app包装。简单比复杂好。使用angular service代替您要访问控制器实例或作用域吗?(听起来你是在试图访问现有代码的作用域)是的,这是一个被剪掉的旧代码。我会改变的。我想访问控制器,但如果只有作用域是可访问的,也许我可以建立一些解决办法。谢谢你的回答。不幸的是,这些选项都不起作用。它们总是返回未定义的
。我假设document.getElementById(“编辑器”)
的id放在了错误的元素上。我已经在我的app/uml编辑器/umleditor.html
文件中将id添加到我的根html元素中,如我的问题中所述。这是错误的吗?您可以在控制台中调试它以检查它是否正确。运行此代码时,元素可能不存在。除非将应用程序与类似于“gulp angular templatecache”的东西捆绑在一起,否则将异步加载模板,并且元素可能随时出现。这是为什么这是一个坏习惯的众多原因之一。
angular.element(document.getElementById("editor")).isolateScope().$ctrl;