使用 angular 的时候有个小问题,调试了好久,提出来,希望有和我一样刚开始学 angular 的小伙伴能搜到然后提醒你解决掉。
错误:
Error: error:modulerr
Module Error
在开发环境下没有问题,在生产环境下报错。
错误产生的原因: 1、代码写错了,不可能,开发环境下面都可以哒; 2、代码写错了,怎么会编译后就报错,我得把编译后的代码挖出来看看是个什么鬼; 3、还是代码写错了,这样写真的健壮么,去仔细看看文档吧。 当然,这可能不是你的问题,它可能来自于蛋疼的生产环境下的压缩机制。
Rails 在生产环境下默认的 uglifier 压缩方式替换了 js 代码里面的变量,angular 读不到$scope,$http 这样的变量了,而被压缩成了 t,a,b,c,d,鬼才知道这些变量是干嘛的。 至于其他压缩方式压缩出来是什么东西我就不清楚了,有兴趣的话可以尝试一下。 还好 angular 有$injector 这个东西,至于具体是什么,我也不想深挖了。为了保证你的代码不被替换,最好直接写成这样:
app.controller 'NavActiveController', ['$scope',($scope) ->
$scope.url = window.location.href
]
我的理解是用字符串去再次去替换变量,或者说是引导 angular 这个聪明的框架调用你想用的 module,妈妈再也不用担心我的变量被无情的替换了。不得不爱。
所以以后玩儿 controller 的时候要注意 function 里面的变量的写法咯,下面这篇文章有详细的解释
http://thegreenpizza.github.io/2013/05/25/building-minification-safe-angular.js-applications/