Javascript 如何从外部访问组件控制器

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 1.5,我有一个像这样的组件

        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;