【问题标题】:Angular good design pattern for implementing utility functions用于实现实用功能的 Angular 良好设计模式
【发布时间】:2016-12-24 17:38:42
【问题描述】:

我搜索了很多设计模式,但没有找到关于如何实现将在某些控制器和 html 标记中使用的功能。我真的很想摆脱复制粘贴功能,所以问题就来了。

我有一些项目作为实体数组存储在 localStorage 中,每个实体都有价格、数量和折扣。将该数组称为物品购物车。在某个页面中,我需要将价格总和插入为“总价”。那就是“购物车显示页面”,它基本上是购物车中的商品列表。另一方面,我有一个带有表格的“订单页面”,其中还应显示总体价格。假设这个页面使用两个不同的控制器进行操作:OrderController 和 CartController,我在这两个控制器中都有一个名为 calculatePrice 的函数,它返回总和,然后在 order.html 和 cart.html 的 html 中插入总和。

所以碰巧我已经做了一些复制粘贴。如果(在最近的将来可能)我有另一个需要此功能的控制器/视图,我将再次复制粘贴。

我对此的看法:

1) 创建一个 $rootScope 函数 calculatePrice 并在控制器和视图中按原样使用它。不受欢迎,不想在我的应用程序的“运行”周期中插入太多命令式代码

2) 为实用函数创建一个服务,将其注入到控制器中,并且只使用声明式样式,例如 '$scope.someFunction = service.someFunction'

3) 创建一个服务,将其注入到 app.run 函数中并连接到 rootScope

但我认为这些都不对。我想找到最可能的清洁解决方案。

【问题讨论】:

  • #2 有什么问题?这是最常见的方法
  • @charlietfl 只是不想在运行函数中写登录。所以我个人参考3,只是想知道一些更有经验的意见。如果我在 run 函数中编写了太多实用程序函数,app.js 文件很快就会被污染和无法管理,即使我为实用程序创建了一个完全独立的应用程序,并将其注入到主应用程序中。
  • 你应该避免污染$rootScope
  • @charlietfl 好的,那么什么时候可以将函数写入 $rootScope?
  • 一开始为什么要写函数到$rootScope

标签: angularjs design-patterns coding-style


【解决方案1】:

我认为你可以创建一个工厂,因为它只实例化一次,然后将你的函数放在那里,并在需要时将其注入控制器中,并将所需的函数分配给 $scope 对象中的变量,因为任何 html 视图都应该链接到控制器。我强烈建议您遵循一些著名开发人员的一些 angularjs 样式指南规则,试试这个我相信它是最好的。

style guild for angularjs 1 & style guide for angularjs 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多