之前遇到的一些问题

做一个single page application。使用angular,一开始使用时候经常碰到各式各样的小问题小细节。

比如Error: error:modulerr
https://docs.angularjs.org/error/$injector/modulerr
可以看到内容
Description
This error occurs when a module fails to load due to some exception. The error message above should provide additional context.
In AngularJS 1.2.0 and later, ngRoute has been moved to its own module. If you are getting this error after upgrading to 1.2.x or later, be sure that you’ve installed ngRoute.

当时是引入了angular-route但是在声明module时候并没有把ngRoute加入到依赖中。

Error: error:btstrpd
https://docs.angularjs.org/error/ng/btstrpd?p0=document

Description
Occurs when calling angular.bootstrap on an element that has already been bootstrapped.

This usually happens when you accidentally use both ng-app and angular.bootstrap to bootstrap an application.

“This usually happens when you accidentally use both ng-app and angular.bootstrap to bootstrap an application” 就是这个小细节当时影响了很久······

angular和backbone的思想区别确实挺大。

require + angular 依然能起到非常好的作用。

在打包的时候要注意一些,因为是使用r.js来做的压缩合并处理,这块就会出现问题,其实原因也可以猜测出来,后续描述,当时上网搜索了下,搜到一篇博客。
http://beletsky.net/2013/11/using-angular-dot-js-with-require-dot-js.html

在最后一段:
The problem with Angular.js optimization is that it using dependency injection mechanism, which resolves the services to inject by it’s name. If optimizer would change the name of function parameters, when application would not work. Fortunately, there is workaround for that.

大概意思就是说压缩合并会改变函数的参数或者名称,但是我们知道angular是通过名称将依赖注入的。所以如果直接这么压缩会导致程序无法运行。我们要通过一个方法来解决。
stackoverflow也有不少类似的问题,for example:
http://stackoverflow.com/questions/17238759/angular-module-minification-bug

在r.js的build.js中加入

	uglify: {
		mangle: false
	}

之后程序继续执行。

不过也确实觉得require,r.js这些估计快变成历史了。

一些过去没注意到的细节问题,比如forEach.
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

可以看到“如果提供 thisArg 参数,它将作为 callback 函数的执行上下文,类似执行如下函数callback.call(thisArg, element, index, array)。如果 thisArg 是 undefined 或 null,函数的 this 值取决于函数是否在严格模式(严格模式下为 undefined,非严格模式下为全局对象)。”

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据