angularjs - angular.js - 定义实用程序库的最佳实践

标签 angularjs module organization modularization

我正在使用 Angular 迈出第一步,我需要定义一个实用程序帮助库,其中包含几个函数方法,例如
dataHelper.parse , dataHelper.sanitize , ETC

以 Angular 组织它的推荐方法是什么?

最佳答案

对于实用方法,我会将它们组织在 Angular 框架之外的库中,但对 angular.extend 的依赖性很小。如果您希望您的库完全独立于 Angular,您可以替换为 extend用你自己的实现。

将您的实用程序 API 封装在 JavaScript 封装中,并将您的库作为 window 的属性公开(在下面的示例中,我将我的库命名为 myLibrary,但您可以自由选择您喜欢的任何名称)。通过将您的库附加为 window 的属性,您将可以无条件引用“myLibrary”。如果您好奇,这正是 angular 库的公开方式。

 (function (window, document) {
     'use strict';

     // attach myLibrary as a property of window
     var myLibrary = window.myLibrary || (window.myLibrary = {});

     // BEGIN API
     function helloWorld() {
         alert('hello world!');
     }

     function utilityMethod1() {
         alert('Utility Method 1');
     }

     function utilityMethod2() {
         alert('Utility Method 2');
     }
     // END API

     // publish external API by extending myLibrary
     function publishExternalAPI(myLibrary) {
         angular.extend(myLibrary, {
             'helloWorld': helloWorld,
             'utilityMethod1': utilityMethod1,
             'utilityMethod2': utilityMethod2
         });
     }


     publishExternalAPI(myLibrary);

 })(window, document);

用法

添加脚本后,您可以从任何地方使用您的库 - 服务、工厂、提供程序、 Controller 、指令等。
<script type='text/javascript' src='angular.js'></script>
<script type='text/javascript' src='myLibrary.js'></script>

<script>
      myLibrary.helloWorld();
      myLibrary.utilityMethod1();
      myLibrary.utilityMethod2();
</script>

实用程序库与 Angular 服务

我更喜欢实用程序函数驻留在自己的库中而不是 Angular 服务中的原因是因为我认为它们与 Angular 生态系统是分开的。这些实用功能几乎是独立的,并且与模块无关,而 Angular 服务/工厂与 Angular 的其他部分(包括 Controller 和指令)密切合作,并且与模块密切相关。

扩展 Angular

如果你真的想要,你甚至可以扩展 Angular 库本身。只需替换 myLibraryangular在脚本中(注意:这可能是不可取的,因为它会使您的脚本依赖于 Angular 实现)。

关于angularjs - angular.js - 定义实用程序库的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24604103/

相关文章:

rest - Symfony2 和使用 AngularJS 之类的框架的单一网页应用程序

javascript - 在 AngularJS 中将键值插入数组时出现 “.push is not a function” 错误

python - 避免每次为 __init__.py 工作而导出 PYTHONPATH

python - 通过 python3 http.server 模块设置公共(public) Web 服务器

jquery - 在大型 javascript 项目中包含/组织 HTML

git - 个人 GIT 仓库

javascript - 提交带有许多动态创建的输入的 AngularJS 表单

javascript - 服务器数据请求后无法更新旋钮的颜色

linux - 将 bash 命令发送到系统的模块

ios - 使用相似的输入字段实现许多相似的 View