.factory("user", userService);
function userService($q, $http) {
function User (){
//....
}
return User;
}
或
.factory("User", ["$q", "$http", function ($q, $http) {
var User = {
//....
}
return User;
}])
我经常看到两者都取决于情况(或者更确切地说取决于作者),但我现在已经想了很长时间(因为我已经开始学习Angular),是什么让它与众不同,如果我可以使用其中一个而不改变任何东西。我通常使用第一个并遵循逻辑,因为我发现它更容易,因为我与第二个相混淆。我可能犯了错误,但这就是为什么我要求一些帮助。
谢谢!
答案 0 :(得分:1)
您问题中的第二个代码段是我建议您用于所有angularjs服务的代码段。
Angular框架提供开箱即用的依赖注入(DI)功能,可在定义组件(如服务,指令,过滤器,动画)或为模块提供运行和配置块时使用。
如果您在角度应用中不使用字符串数组来定义依赖项,那么您做错了。这种注册依赖项的方法适用于JavaScript源文件的非缩小版本。
但是如果你打算缩小生产的文件,每个人都必须这样做,那么所有那些(依赖)参数将被改为一些非常随机的东西,哪些角度将无法映射到任何注册的组件。所以最终,框架会抛出一个错误。
为了避免这个错误,我们可以确保始终使用类型字符串数组来指示依赖项。 Read this in more detail。如果您是自己的,那么您可以记住这个提示。但是,如果在团队中工作,最好使用以下选项对其进行配置,以便团队中的每个人都遵循此规则。如果没有,那么他们将遇到错误。
我建议你使用严格的DI模式。
如何启用严格模式? 可以使用下面提到的两个选项启用此模式。
方法-1:强>
<div ng-app="myApp" ng-strict-di>
<!-- your app here -->
</div>
方法-2:强>
angular.bootstrap(document, ['myApp'], {
strictDi: true
});
Learn why is strict DI mode good for your AngularJS app in my blog post.
答案 1 :(得分:0)
第一种形式不适用于缩小。使用缩小时需要第二种形式。原因是AngularJS注入器使用函数参数名称来解析第一种形式的$q
和$http
依赖项。如果功能参数名称被更改(例如,通过缩小),那将失败。第二种形式依赖于字符串"$q"
和"$http"
,这些字符串不会因缩小而改变。
这在step 7 of the AngularJS tutorial中进行了讨论。