发表于: 2017-05-30 21:27:50
1 1443
今天完成的事情:
1.对Angular.module的参数有了进一步认识。它有三个参数name(新模块的名字),requires(该模块所依赖的模块集合),config(该模块的配置,不过这个等效于调用module.config方法)。而且对于写法应该使用var myApp = angular.module('exampleApp', []);而不是var myApp = angular.module('exampleApp');这就关系到避免落入模块创建/查找陷阱中。
2.控制器扮演了模型和视图之间的渠道的角色,使用module.controller方法来定义的,该方法接受两个参数:控制器名称和一个工厂函数。这个不在多说。就是在控制器名称的命名习惯是使用Ctrl后缀(这里ng-book上说的不同了ng-book上说用Controller,看以后实践上习惯哪个了。)AngularJS提供了一些以$符号开头命名的内置服务与特性。例如myApp.contruller('dayCtrl',function($scope){
//运行语句
});中的$scope,
然后就是关于依赖注入。
在上面中,控制器需要使用$scope组件,这能够允许向视图传递数据。这是一个关于依赖的例子-控制器依赖于$scope组件来执行工作。
依赖注入简化了在组件之间处理以来的过程(被称为是解决依赖)。没有依赖注入,就不得不以某种方式自己查找$scope,很可能得使用全局变量。这虽然也能够工作,但是不如AngularJS的依赖注入技术这么简单。
换言之,依赖注入改变了函数参数的用途,没有依赖注入,参数会被用于接收调用者想传入的任何对象,但是有了依赖注入后,函数使用参数来提出需求,告诉AngularJS他需要什么样的组件。
AngularJS中的依赖注入的工作方式所带来的有趣的副作用之一是,参数的顺序总是得与声明依赖的顺序相匹配。
但是换句话来说,你声明依赖注入参数的顺序无关紧要。这也许看起来挺明显,但是却不是JavaScript通常的工作方式,而且需要花些时间来习惯(这里说了对于AngularJS和JavaScript的工作方式的不同)。
可以一个控制器对应一个视图,也可以一个控制器对应多个视图,也可以多个控制器写多个视图,一个视图也可以对应多个控制器。(多对多)。然后就是Fluent API通过Module对象定义的方法返回的结果仍然是Module对象本身。即多个方法调用可以链式连接在一起。(这就是我们见到为什么有些程序没有先var 就直接写angular.module)
就是不用var myApp =
而是直接angular.module,在.controller(){} .controller(){} 注意都不用加';'分号。
3.指令
工厂和工人函数
所有的可用于创建AngularJS构件的Module的方法都可以接受函数作为参数。这些函数被称为工厂函数,之所以这么叫是因为他们负责创建那些将被AngularJS用来执行工作的对象。工厂函数常常会返回(return)一个工人函数,也就是说将被AngularJS用来执行工作的对象也是一个函数。(工厂创建工人.构件>工厂函数>工人函数)。
有一点很重要,就是不能够依赖于工厂函数或工人函数在某个特定时刻被调用。如当你想注册一个构件时,你得调用Module的方法。当建立构件时AngularJS将调用工厂函数,然后当需要使用该构件时就会调用工人函数,这三个事件不一定会按照顺序立即调用(就是三者顺序不一定)
4AngularJS开发过程中因为你经常重构你的代码,把功能从一个组件移到另一个。
还有就是在AngularJS应用程序中创建的构件并不仅限于在HTML元素上使用,在你的JavaScript代码里也可以使用。
5.为什么以及何时使用指令(包括内置指令和自定义指令)
指令是AngularJS中极具特色的特性,建立了AngularJS开发的整体风格和AngularJS应用程序的形式。其他JavaScript库(包括颇受欢迎的jQuery)都是将HTML文档当做一个需要解决的问题,再将其用于创建Web程序之前需要进行修正。
AngularJS则独辟蹊径:通过包含和增强HTML来创建AngularJS的Web应用程序,将HTML当做构件程序特性的基础而不是问题来处理。
使用指令
一般来说使用指令的方式只是一种风格偏好的问题,结合你的开发工具集考虑选择即可。我一般更喜欢将指令用作属性,如下:
There are <span ng-bind="todos.length"></span>item
这里的话说下自定义指令(directive,关于restrict不是有4种模式可以选么EACM。看了这里觉得还是用A,而不是e,感觉就是和上面的属性配套好。如<div my-directive></div>这种好了。其实各有优点吧)
但是如果你不能或不想使用自定义指令,你可以将指定配置为用作标准class属性的方法(有些大公司的版本控制系统受中央集群控制,远远落后与维护他的开发团队的需求),如:There are <span class="ng-bind:todos.length"></span>item
5.算是了解了service用法,但是在controller中用。还没有涉及directive中。
明天计划的事情:
directive和controller的关系。
遇到的问题:
暂无
收获:
定义服务
服务是提供在整个应用程序中所使用的任何功能的单例对象。对于普通任务,AngularJS自带了一些有用的额内置服务,例如创建HTTP请求。一些关键的方法也被AngularJS作为服务,包括前面例子中使用的$scope和$filter对象。因为这是AngularJS,你可以创建自己的服务。
单例的意思是说只有一个对象实例会被AngularJS创建出来,并被程序需要服务的各个不同部分所共享。
modul对象所定义的方法中有三个是用来以不同方式创建服务的:service、factory和provider。这三个方法是紧密相关的。
service方法具有两个参数:服务名和调用后用来创建服务对象的工厂函数。当AngularJS调用工厂函数时,会分配一个可通过this关键字访问的新的对象,我就可以使用这个对象来定义today和tomorrow属性。这是一个简单的服务,但是意味着我可以在我的AngularJS代码中任意处通过我的服务访问today和tomorrow的值-当创建更负责的应用程序时,这一点是有助于简化开发过程的。
tip:即使是在controller方法之后才调用service方法,也可以在控制器中使用服务。你可以按照任何顺序创建你的组件,AngularJS将保证在开始调用工厂函数和执行依赖注入之前一切都已正确创建。
通过声明对于days服务的依赖,可以访问我的服务,
myApp.controller('tomorrowCtrl',function($scope){
AngularJS使用依赖注入来查找days服务并将其作为参数传给工厂函数,这意味着我可以获取到today和tomorrow属性的值并使用$scope服务将他们传给视图:
myApp.controller('tomorrowCtrl',function($scope,days){
$scope.day = days.tomorrow;
});
这里说下Date()这是个JS方法,具体看
http://blog.csdn.net/icanlove/article/details/21989339/
为什么以及何时使用指令
指令是AngularJS中极具特色的特性,建立了AngularJS开发的整体风格和AngularJS应用程序的形式。其他JavaScript库(包括颇受欢迎的jQuery)都是将HTML文档当做一个需要解决的问题,再将其用于创建Web程序之前需要进行修正。
AngularJS则独辟蹊径:通过包含和增强HTML来创建AngularJS的Web应用程序,将HTML当做构件程序特性的基础而不是问题来处理。
评论