从Angular 1.0升级到1.3.2角的主要挑战是什么?

时间:2014-11-18 18:57:16

标签: angularjs

我有一个Angular 1.0应用程序,我被要求将其升级到1.3.2这两个版本之间的主要变化/新功能有哪些。最大的挑战是什么。

我知道这个问题有点广泛。我不知道如何缩小它。关于如何缩小评论范围的建议将非常受欢迎。

4 个答案:

答案 0 :(得分:6)

我必须说,因为它感觉像是一个次要版本,绝对感觉就像升级到一个主要版本(随着它的所有重大变化)。

我指出一些案例对我来说是一种或另一种挑战:

  • 第三方图书馆不及1.3版本,其中一些图书馆正努力兼容,但在这一天你会发现问题。
  • 与IE 8不兼容(对某些人来说可能是一个问题)
  • 突破变化
    • $ cancelUpdate
    • $动画
    • $编译
    • $路线
  • API的变化
    • 如何注册拦截器
  • 行为更改
    • 提供者注册始终在配置给定模块之前发生
    • $资源
    • $位置
  • Angular分成几个模块模块
    • NgRoute
    • NgResource

依旧.......我建议您阅读此migration guidethis other,尝试浏览每一条备注并查看您需要的更改做。

这听起来像是一场大噩梦,你肯定要花一些时间在你的应用程序中重构很多代码,但我会说并不是一切都很糟糕的角度团队(以及社区)已经修复了很多一般性能问题和其他问题,他们添加了一些很酷的功能,如one time bindings,ngAria,ngMessages,ngModelOptions等。

我只想指出最后的痛苦,你会获得奖励

答案 1 :(得分:3)

Angular在其网站上记录了重大变更/迁移问题的详细列表。您可以在此处查看文档:{​​{3}}

我已就主要的重大变化做了一个简短的清单

从1.0迁移到1.2的重大变化摘要:

  1. ngRoute已被移入自己的模块
  2. 模板没有长期自动解开承诺
  3. $ route中更改了命名通配符参数的语法。
  4. 您只能将一个表达式绑定到[src],[ng-src]或action。
  5. 现在不允许使用DOM事件处理程序内的插值
  6. 指令不能以-start或-end结尾
  7. 在$ q中,promise.always已重命名为promise.finally
  8. ngMobile现在是ngTouch
  9. 资源。$ then已被删除
  10. 资源方法返回承诺
  11. 使用资源实例
  12. 解决资源承诺
  13. $ location.search支持多个密钥
  14. ngBindHtmlUnsafe已被删除并替换为ngBindHtml
  15. 评估表达式的表单名称
  16. hasOwnProperty不允许作为输入名称
  17. 指令:postLink函数的顺序颠倒
  18. 指令优先级
  19. ngScenario
  20. ngInclude和ngView在更新
  21. 上替换其整个元素
  22. 网址现已针对白名单进行清理
  23. 隔离范围仅暴露于具有范围属性的指令
  24. 更改为插值优先级
  25. Underscore-prefixed / suffixed属性是不可绑定的
  26. 您无法绑定到选择[多个]
  27. 从i18n
  28. 中删除了罕见的特定于区域的本地文件
  29. 服务现在可以返回功能
  30. 从1.2迁移到1.3的重大变化摘要:

    1. 您无法再对角度表达式中的函数调用.bind,.call或.apply。
    2. proto属性不再适用于角度表达式。
    3. Angular.copy:它将原始对象的原型应用于复制的对象。以前,angular.copy会将原始对象的原型链的属性直接复制到复制的对象上。
    4. 值'f','0','false','no','n','[]'不再被视为麻痹。现在,表达式解析器只将JavaScript假值视为伪造;其中有六个:false,null,undefined,NaN,0和“”。
    5. 如果您发现您的代码现在抛出$ compile:multidir错误,请检查您是否在尝试同时请求隔离和非隔离范围的同一元素上没有指令并修复代码。< / LI>
    6. 输入:类型日期,时间,日期时间 - 本地,月份,星期现在总是需要Date对象作为模型
    7. jQuery detach()方法不会触发$ destroy事件。如果要销毁附加到元素的Angular数据,请使用remove()。
    8. $ broadcast和$ emit现在会在事件传播完成后将事件的currentScope属性重置为null。如果任何代码依赖于异步访问其currentScope属性,则应迁移它以使用targetScope。所有这些情况都应该被视为编程错误。
    9. angular.toJson:如果您希望json之前剥离这些类型的属性,则必须自己手动执行此操作。
    10. $资源
    11. 以前可以在Text / Comment节点上设置jqLit​​e数据,但现在只允许在元素和文档节点上使用,就像在jQuery中一样。我们不希望应用程序代码实际上取决于此意外功能。

答案 2 :(得分:1)

ng-route&amp; ng-resource在角1.3.2中作为单独的模块/库制作。所以,这些js文件需要包含在你的html文件中。

答案 3 :(得分:1)

我在使用angularjs应用程序时发现了一个主要的变化,即模板中的过滤器用法。

例如,

旧版

|过滤器:{product.name:stock.product.name}

更新版本

|过滤器:{product:{name:stock.product.name}}