Javascript 如何访问Angularjs控制器中其他文件(非控制器)中定义的函数?
我知道这似乎是一个愚蠢的问题,但我这里有一个场景 我有一个javascript文件,它使用three.js来呈现一些模型。 此文件需要一个后端库,但我的WebGL呈现在前端,因此我使用Browsefiy将我自己的代码和后端库组合到一个名为script.js的js文件中 我想在controllers.js中定义的控制器中触发script.js文件中的init函数(仅在用户单击某个按钮后才进行渲染)。 我知道angularJs的控制器似乎与外部代码隔离,但我找不到解决问题的好方法 因为一旦我浏览了包含后端库的代码,它就会将400行渲染代码转换为2500多行代码,并且不可能在单个控制器中编写 有什么好办法解决这个问题吗?我将非常感谢任何建议或想法!谢谢Javascript 如何访问Angularjs控制器中其他文件(非控制器)中定义的函数?,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我知道这似乎是一个愚蠢的问题,但我这里有一个场景 我有一个javascript文件,它使用three.js来呈现一些模型。 此文件需要一个后端库,但我的WebGL呈现在前端,因此我使用Browsefiy将我自己的代码和后端库组合到一个名为script.js的js文件中 我想在controllers.js中定义的控制器中触发script.js文件中的init函数(仅在用户单击某个按钮后才进行渲染)。 我知道angularJs的控制器似乎与外部代码隔离,但我找不到解决问题的好方法 因为一旦我浏览了包
<head>
<---This are the angular files I need->
<script src="./lib/angular/angular.min.js"></script>
<script src="./lib/angular-route/angular-route.min.js"></script>
<script src="./js/app.js"></script>
<script src="./js/controllers.js"></script>
<script src="./js/services.js"></script>
<--the followings are the rendering files I need-->
<script src="lib/third-party/threejs/three.min.js"></script>
<script src="lib/third-party/threejs/StereoEffect.js"></script>
<script src="lib/third-party/threejs/DeviceOrientationControls.js"></script>
<script src="lib/third-party/threejs/OrbitControls.js"></script>
<script src="./js/script.js"></script>
</head>
更新
我发布了我的script.js。它相当长,所以我希望我可以通过找出如何以一种简单的方式访问内部的init函数来解决这个问题。谢谢
如果控制器中存在父子关系,则可以使用
$scope.$parent.<anything>
如果您使用的是ES6-
module.exports = {
<function_to_export_1>,
<function_to_export_2>,
....
};
module.exports={
,
,
....
};
您也可以使用
窗口将函数设置为全局函数。
但这会污染全局作用域,因此不建议这样做。尝试将第三方文件移到您的文件上方?如果第三方内容没有通过Angular注入,则您可以通过全局作用域访问它window.threejs()
或他们公开的任何内容。@Phil嗨,对不起,我不确定你指的是什么。最后一个文件script.js是我在Browserify之后得到的文件。所有的第三方代码都在上面。你好@Stephen,谢谢你的回复。Three.js似乎是在窗口下注册的。它使用module.exports=THREE,在我的script.js文件中,我可以使用renderer=new THREE.WebGLRenderer()等语法访问它;但问题是我的init函数没有注册在window对象下。无法在controller.js文件中访问它。我尝试了module.exports,但由于script.js包含一个后端库,因此它也有几行module.exportsLook命令将库包装成指令。如果它执行DOM操作或修改视图,那么工作应该在指令中完成。控制器只需将任何数据绑定到作用域上,就可以将其传递到最终使用第三方库来操作DOM的指令中。这将确保可以在没有DOM的情况下测试angular中的控制器和任何提供程序,并且可以测试指令如何创建/操作DOM对象。对不起,你好像误解了我的问题。我的script.js文件中的函数与控制器无关。在这种情况下,您可以将模块中的函数导出为IIFE,或者将其设置为全局函数(请不要)。您现在可以轻松访问它
module.exports = {
<function_to_export_1>,
<function_to_export_2>,
....
};