gpt4 book ai didi

javascript - 如何访问 Angularjs Controller 中其他文件(不是 Controller )中定义的函数?

转载 作者:行者123 更新时间:2023-11-30 00:05:27 25 4
gpt4 key购买 nike

我知道这似乎是个愚蠢的问题,但我这里有一个场景。

我有一个使用 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 函数来解决这个问题。谢谢!

https://jsfiddle.net/ruiss/qr616n4q/

最佳答案

如果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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com