我知道这似乎是个愚蠢的问题,但我这里有一个场景。
我有一个使用 three.js 渲染某些模型的 javascript 文件。 这个文件需要一个后端库,但我的 WebGL 渲染是在前端进行的,所以我使用 Browsefiy 将我自己的代码和后端库组合到一个名为 script.js 的 js 文件中.
我想在 controllers.js 中定义的 Controller 中触发 script.js 文件中的 init 函数(渲染仅在用户单击某个按钮后发生)。 我知道 angularJs 的 Controller 似乎与外部代码隔离,但我找不到解决问题的好方法。
自从我浏览我的代码以包含后端库后,它将我的 400 行渲染代码变成了 2500 多行代码,并且无法在单个 Controller 中编写。
有什么好的方法可以解决这个问题吗?我将不胜感激任何建议或想法!谢谢!
<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 函数来解决这个问题。谢谢!
最佳答案
如果controller中有父子关系,可以使用
$scope.$parent.<anything>
如果没有,则将其添加到$rootScope
您还可以使用 $boardcast
和 $emit
方法来传递数据并监听它以调用函数(监听器)。
您还可以创建 services
它将保持功能并将在多个 Controller 之间共享。
最后,请查看此链接以获取详细信息 https://stackoverflow.com/a/20181543/1702612
编辑:
由于该功能是通用的,您可以尝试这些解决方案-
创建 IIFE -
var coreFunctions = (function() {
return <Object_of_functions>;
} ());
如果你使用的是 ES6 -
module.exports = {
<function_to_export_1>,
<function_to_export_2>,
....
};
您还可以使用 window.<function>
使函数成为全局函数但这会污染全局范围,不推荐。
关于javascript - 如何访问 Angularjs Controller 中其他文件(不是 Controller )中定义的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38709445/