这么多缺件。下一步去哪儿看?

时间:2014-03-14 21:18:33

标签: angularjs

学习角度是一个非常令人沮丧的过程。几周前我才开始踏上这条无尽的道路。我已经浏览了角度网站上的official tutorial,观看了egghead.io上的前40多个视频,并阅读了其他几个教程和示例。我是棱角分明但对javascript,jQuery和淘汰赛有很多经验,但即使经过我所经历的所有研究和实例,我仍然无法拼凑起来在现实世界中最简单的角度应用程序。

问题在于,这些教程和示例中的大多数试图显示角度的所有不同部分,包括控制器,指令,过滤器,服务,$ http / $资源,路由,动画等。所以你最终得到这个一个或两个控制器应用程序没有任何实质内容,但它包含所有这些功能的基础知识。现在,剥离一些简单的应用程序(如资源,路由和动画)不需要的所有功能,并为业务逻辑和数据管理添加实质内容,您可以快速查看存在多少个漏洞这些教程。

例如,教程将展示如何使用服务在控制器之间共享数据。它将重新创建控制器,并使用服务使用$ http或$ resource从服务器获取数据。然后它将显示即使数据请求是异步的,也很少需要回调,因为数据绑定只是在数据到达之前是空的,然后神奇地填充。现在你有一个可重用的服务来获取数据你的所有控制器。

哇!一切都是如此简单和干净,它只是工作! Angular太棒了!然后,当然,当你去编写一个需要多个控制器的实际应用程序时,控制器都依赖于相同的数据,并且你添加了一个名为"业务逻辑"这也是共享和使用这些数据,你立即意识到事情并非如此简单。

首先,只要添加必须使用服务器数据的业务逻辑(就像使用任何真实的应用程序一样),就会破坏没有回调的干净代码。您现在必须在任何地方实现回调,因为您必须等待数据到达才能使用它。其次,原型范围继承变得不可靠,因为您不知道来自其他控制器的数据是否已加载。最糟糕的是,这些教程中没有任何关于如何在控制器和服务器之间保持数据同步的内容。如果在一个控制器的范围内修改了数据,那么所有其他控制器范围也需要更新......

这些只是一些复杂性,即使使用非常简单的应用甚至不使用路由也会引入。我试图制作一个不会保留数据的简单计算器,而且我遇到所有这些问题和问题,无法找到任何真正的解决方案。

有人可以指出一个好的教程,示例或书籍的正确方向,这将填补这些缺失的漏洞而不会陷入我的应用程序不需要的复杂角度部分吗?

提前致谢并对此咆哮感到抱歉,这非常令人沮丧:/

3 个答案:

答案 0 :(得分:4)

我远非成为一名棱角分明的专家,我实际上也在学习过程中。然而,我们几乎完成了我们的第一个angularJS MVP工作,所以也许我可以分享我的一些经验。以下是我学到的一些模式

  • 您的控制器应该是极简主义的,并呼叫服务和工厂。
  • 控制器操作由$emit$broadcast触发,这是保持所有内容同步的原因。我的控制器只有一个$scope.$on('onCustomAction',function(event,params){ $scope.myObject.doSomething(); })列表。理想情况下,它应该是一个极简主义的列表。
  • 在ng-click中,您应该使用myObject.fancyMethod()等方法,其中myObject是“$ scope”的一部分。
  • 在指令中放置具有自己的小控制器的小块可重用html。我已经很晚了,但我开始有一些。
  • 对需要移动的大块html使用ng-include(即:模态窗口,主要内容,侧边栏等)。
  • 请记住,如果它不在$ scope中,它可能也不存在。
  • 服务可以调用其他服务,可以用于单例和实例化对象。它们应该是你代码的核心。

希望这会有所帮助。随意争辩这些项目。

答案 1 :(得分:3)

正在经历同样类型的angularjs挫折的人。我知道了。极大地帮助了我的是Jeremy Howard的4部分tutotial,"Angularjs End to end web app in under an hour".它使用了ASP.net,但我相信大多数后端示例都可以轻松地与任何其他框架重现。

这是一个快速而脏的清单,列出了我发现这个有用的原因。

  1. 示例是Todo CRUD应用程序,可用作大多数其他Web应用程序的模板。
  2. 视频以合理的速度移动,并分解为逻辑功能区域。
  3. Jeremy使用了上面描述的其他视频中的一些技术,例如承诺,指令,工厂,服务,链接功能,控制器等。但是,他使用的示例确实有实质因为他们在todo应用程序的上下文中工作。
  4. 最后,看着Jeremy完成他的教程后,很明显非常组织你的后端结构将使你的前端角应用程序变得更加强大。将问题分离到另一个层面。
  5. 我可以继续,但有一件事我可以说,Jeremy的教程不仅让我在angularjs上做得更好,而且让我更擅长成为一个完整的堆栈开发者。

    帮自己一个忙,看看吧。你不会后悔的。祝你好运。

答案 2 :(得分:2)

以下是处理问题的数据模型的精彩教程:

"最糟糕的是,这些教程中没有任何内容可以说明如何保持控制器与服务器之间的数据同步。如果在一个控制器的范围内修改了数据,那么所有其他控制器范围也需要更新......"

http://www.webdeveasy.com/angularjs-data-model/