我可以将外部javascript文件链接到AngularJS控制器吗?

我可以将外部javascript文件链接到AngularJS控制器吗?,javascript,angularjs,Javascript,Angularjs,这可能是个愚蠢的问题。我知道AngularJS控制器使用javascript代码将应用程序逻辑保持在视图之外。但我想知道是否可以将一个外部javascript文件链接到一个控制器,这样就不必太长了 如果可能的话,请您也分享一下我将如何做到这一点的语法。比如: app.controller('demoCtrl', ['$scope', function ($scope) { $scope.msgtxt='Hello World'; src=somejavascriptfile.js

这可能是个愚蠢的问题。我知道AngularJS控制器使用javascript代码将应用程序逻辑保持在视图之外。但我想知道是否可以将一个外部javascript文件链接到一个控制器,这样就不必太长了

如果可能的话,请您也分享一下我将如何做到这一点的语法。比如:

app.controller('demoCtrl', ['$scope', function ($scope) {
    $scope.msgtxt='Hello World';
    src=somejavascriptfile.js;
}]);

在另一个文件中,定义一个包含逻辑的服务,然后从控制器调用它

app.controller('demoCtrl', ['$scope', function (ServiceFromDifferentFile, $scope) {
    $scope.msgtxt='Hello World';
    ServiceFromDifferentFile.doStuff()
}]);

如果您的问题是控制器逻辑太长,那么这是一种代码味道,这是正确的。您希望使控制器尽可能精简,只需要足够的逻辑来处理视图事件和更新模型(范围)。如果您想重构控制器代码,第一步是将逻辑提取到服务中(用术语providers/factories/services)。然后可以将这些服务注入控制器,类似于注入
$scope
服务的方式

阅读了解有关如何执行此操作的详细信息

下一步可能是寻找可以提取到指令中的逻辑(主要与UI相关)


如果您需要在angular应用程序中使用外部javascript库,最佳方法是将该脚本添加到html文件的脚本部分,并将功能包装到服务或指令中(如果与UI相关)。确保检查是否有可用于您要拉入的第三方库的角度模块。

您不仅可以在不同的文件中分割控制器代码,而且您可能应该这样做。角度控制器负责视图背后的业务逻辑,并且仅负责该逻辑。如果在控制器内部,您是(列表中没有详尽列出)错误的,则您是在做错事:

  • 从它访问您的后端
  • 操纵DOM
  • 编写用于在应用程序中显示警报的实用程序代码(例如)
您的组件应简洁,并具有单一责任

下面是一个如何在服务中导出部分代码的示例。您不从控制器链接js文件,但将其加载到页面中,并将服务作为控制器的参数注入:


1) 在index.html:

<script src="js/factories/loggerService.js"></script>

3) 将您的服务注入控制器:

app.controller('demoCtrl', function ($scope, loggerService) {
    loggerService.info(...)
});

顺便说一下,只有当您需要与angular内置服务提供的服务不同的服务时,此
loggerService
才有用
$log

我想我明白您的意思,但我不完全确定将外部文件放在何处。我只是在主视图'index.html'中链接它,然后使用ServiceFromDifferentifFile调用它,还是需要将外部文件链接到服务或工厂?这一直是重点。如何避免index.html中的链接!!??您可以使用grunt之类的工具将所有文件连接到一个大文件中,gulp etcI甚至没有找到AngularJS库。我试图让同位素在一个可用的模块中工作。令人惊叹的。如此简单却又如此辉煌。谢谢或者是很好的资源,看看是否有“角度化”的第三方模块可用于您正在寻找的功能。如果你正在寻找一个同位素库,这是一个很好的选择。
app.controller('demoCtrl', function ($scope, loggerService) {
    loggerService.info(...)
});