学习笔记-AngularJs (一)

最近对AngularJs产生了浓厚的学习兴趣,于是便搜罗所有资料,开始学习起来,也希望把学习过程记录下来。

首先学习之前,需要对AngularJs进行个大概的了解:

AngularJS[1]  诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。是一款优秀的前端JS框架,已经被用于Google的多款产品当中。AngularJS有着诸多特性,最为核心的是:MVVM、模块化、自动化双向数据绑定、语义化标签、依赖注入等等。

AngularJS使用了不同的方法,它尝试去补足HTML本身在构建应用方面的缺陷。AngularJS通过使用我们称为标识符(directives)的结构,让浏览器能够识别新的语法。例如:

使用双大括号{{}}语法进行数据绑定;

使用DOM控制结构来实现迭代或者隐藏DOM片段;

支持表单和表单的验证;

能将逻辑代码关联到相关的DOM元素上;

能将HTML分组成可重用的组件。

AngularJS主要考虑的是构建CRUD应用,不适合游戏,图形界面编辑器,这种DOM操作很频繁也很复杂的应用。

就不写hello world的程序例子,直接先展现一个项目目录,这样对一个项目的构建才有所眉目,不至于无从下手,觉得angular.js官方给的phonecat项目是值得学习的,js文件目录主要如下图:

js文件目录:

一、app.js  项目的配置文件,路由的配置,模块的依赖可以写在这里。demo:

var phonecatApp = angular.module(‘phonecatApp‘, [  ‘ngRoute‘,  ‘phonecatAnimations‘,
  ‘phonecatControllers‘,  ‘phonecatFilters‘,  ‘phonecatServices‘,‘phonecatDirectives‘]); 

//路由
phonecatApp.config([‘$routeProvider‘,
function($routeProvider) {
$routeProvider.
when(‘/phones‘, {
templateUrl: ‘partials/phone-list.html‘,//模板的相对路径
controller: ‘PhoneListCtrl‘ //使用的控制器名
}).
when(‘/phones/:phoneId‘, {
templateUrl: ‘partials/phone-detail.html‘,
controller: ‘PhoneDetailCtrl‘
}).
otherwise({
redirectTo: ‘/phones‘
});
}]);

//使用angular.moudle(‘phonecatApp‘,[...])进行模块化,phonecatApp 就是ng-app的值,ng-app指的是从拥有该指令的html标签开始,将整个控制权交给angular.js去管理,[...]是对模块的依赖,通俗地讲,就比如[]里面的 ‘phonecatControllers‘,那么之后在controller.js(后面有讲)就可以直接

var phonecatControllers = angular.module(‘phonecatControllers‘, []); //‘phonecatControllers‘此处在app.js有进行模块依赖了,所以这里就这样写
phonecatControllers.controller("控制器名",function($scope){...})

以往的套路是这样的,

var phonecatApp = angular.moudle("phonecatApp",[]);

然后phonecatApp.controller("控制器名",function(){...}),这样的话那么我们指令、服务、过滤器都需要写在同一个js文件。当然也是可以没有错的,但是把所有js代码写在同一个js文件里面,太臃肿了,管理起来也难!

路由的设置也在这里写,路由的知识以后再详细讲,这里只是讲整个项目的目录。

二、controller.js  项目的控制器文件,所有控制器写在这里。demo:

var phonecatControllers = angular.module(‘phonecatControllers‘, []);
phonecatControllers.controller("控制器名",[‘$scope‘ ,‘$http‘,function($scope,$http){...}]);

三、services.js  项目的服务文件,根据angualr的依赖注入机制,可以自己写服务,然后在写控制器代码时传入,如:phonecatControllers.controller("控制器名",[‘$scope‘ ,‘myservice‘,function($scope,myservice){...}]); myservice是自定义的服务,这样就可以注入,在不同控制器调用同个业务(引入$http等来异步获取数据,因为不同控制器操作的源是一样的,所以可以封装成一个服务供调用),可以使用自定义服务来进行封装,供不同控制器注入调用,尽量不要使用$命名,以免冲突出现错误。demo:

var phonecatServices = angular.module(‘phonecatServices‘, [...]); //同上所述,[...]为依赖

phonecatServices.factory(‘Phone‘, function(){

  return [‘1882345555‘,‘123453222‘];

});

编写服务js,分别有factory、provider、service方法,这里使用factory,这样的话在controller.js写控制器的时候,就可以注入使用了,上面有阐述了。

四、filters.js  项目过滤器文件,看过大概看了一下angular.js内置的一些过滤器(如date、curreny等,因为是初学,所有只是大概看了一下,之后会继续学习深入的),那往往是不够用的,往往我们需要自己自定义一些过滤器,这样的话我们就可以在我们的模板文件(.html)中引入了,如<input ng-model=‘xxx‘ type="text" onlyNum />或是<span>{{XxXX | touuper }}</span>,onlyNum(限制只能输入数字)、touuper(转换成大写字母)就是我们自定义的过滤器。demo:

var phonecatFilter = angular.module(‘phonecatFilters‘, []); //同上所述,[...]为依赖
phonecatFilter.filter(‘touuper‘, function() {
   return function(input) {
       return input.toUpperCase();
   };
});

五、directives.js 项目的指令文件,这里写的是项目中,我们自己自定义的标签,制定的标签可以引入到模板文件里面使用,其代表含义,我们在directives.js中去定义,这个也是angualr.js比较有特点的功能,原本的html标签已经很丰富的了,但是这样的自定义标签可以使htmldom结构中更能自定义话,ng-*就是指令,可以去打开源码去看,它们都会被编译我们熟悉的属性、html标签,而指令有着四种形式AEMC,分别是attrs、element、注释、class,demo:

angular.module(‘phonecatDirectives‘, []).directive("hello", function() {
return {

scope: {} ,//是否具有独立作用域
restrict: ‘AEMC‘,   //定义类型
template: ‘<div>Hi everyone!</div>‘,  //模板
replace: true  //是否替换原来的节点

link: function(scope,element,attrs,[controller]){ 

//定义指令的行为,如果不需要则不需引入

}

compile:function(){

//编译指令时的函数

}

templateUrl: ""  //模版路径
}
});

总结:这里主要讲了,一个angualr项目的基本目录,方便之后去创建一个项目,不会说没有思路,这里的js文件主要有,app.js、controllers.js、services.js、filters.js、directives.js,分别是基本配置、控制器、服务、过滤器、指令,在配合模版(.html)使用,实现mvc模式的设计思路,之后每一分块会继续学习,继续深入,然后记录下来,在这里先讲目录。这确实是一门很有前途的技术,会好好学习的!

时间: 2024-10-27 19:28:10

学习笔记-AngularJs (一)的相关文章

学习笔记-AngularJs(九)

到目前为止,我们所做的学习案例都是没有加任何动画效果的,对于以往来说,我们经常会去使用一些动画插件或是css框架(如:animate.css)来点缀我们的网页,这样显得生动,高大上,那么接下来我们可以学习一下,怎么在AngularJs下来实现叼酷炫的动画操作,主要使用的命令是ngAnimate. 与之前的ngResource,ngRoute一样,需要注入ngAnimate和引入ng-animate.js才可以使用此服务,想在你的angular应用程序使用ngAnimate来实现动画功能,前提条件

学习笔记-AngularJs(三)

学习笔记-AngularJs(二)写了个所有程序语言入门时都必须要写的Hello World,那么从现在开始做那个之前说过的互联网大佬介绍的学习例子,当然这里开始会慢慢按照之前说过的目录来搭建这个学习的demo,将控制器.过滤器.指令.服务.基本配置都独立成一个个js文件,直接贴张效果图: (有点简陋,之后再把样式写好看些!) 这里实现的功能是这样的,在前台遍历phones的对象数组,然后可以按照年龄和名字排序,也可以通过输入字符串过滤检索.代码如下: html: <!doctype html>

学习笔记-AngularJs(十)

前面一直在说自定义指令,但是却一直没有一次系统地去了解,现在需要我们一起来学习如何去使用自定义指令,去丰富html标签.属性,实现多元化.多功能的标签(或是属性).辣么,啥是指令?要了解指令,首先需要了解AngularJs的HTML编译器,简单地说让浏览器认识你自定义指令或是Angular的指令集,将其行为运用到DOM上(视图),分两个过程编译和链接,编译阶段是遍历DOM并且收集所有的相关指令,生成一个链接函数:链接阶段是给通过编译阶段调用所说的链接函数来将模板与作用域链接起来,绑定一个作用域,

学习笔记-AngularJs(六)

在学习笔记-AngularJs(五),通过引入bootstrap.css进行改写整个样式,这时学习项目也变得好看多了,现在我们又需要目录再进行一次改变,如下图: 这样就符合之前讲的对学习目录进行布置了! angualrJs自带了一些默认的过滤器,如: {{"xiaobin" | uppercase}} {{"XIAOBIN" | lowercase}} {{ 1304375948024 | date:"yyyy-MM-dd"}} {{ {&quo

学习笔记-AngularJs(四)

之前学习的事视图与模版,我们在控制器文件中直接定义一个数组,让其在模版文件中用ng-repeat指令构造一个迭代器,定义的数组如同以下: $scope.phones = [ {'name':'xioabin','number':'18824863682','age':'12'}, {'name':'xioalong','number':'18824863683','age':'19'}, {'name':'xiaohua','number':'18824863684','age':'5'}, {

学习笔记-AngularJs(八)

在使用form.FormController和ngModel.NgModelController之前,先来学习一下怎么一个ng-model-options指令,觉得怎么这个指令挺好用的,我们知道ng-model是可以实现数据的双向绑定,至于双向数据绑定这个概念时必须要清楚的,都是这样的一个过程,view->scope和scope->view,只要双向绑定的element都是走怎么一个过程的,那么这个ng-model-options,就是可以实现对延迟更新.如何触发更新.时区(timezone针

学习笔记-AngularJs(五)

之前的页面太丑了,后来我引入了bootstrap.css,把样式进行修了一番,如下图: (链接:http://www.live086.cn/angularjs/#/phones) 是不是觉得好看多了,这里我在原先phone.json里面多加了人物的图片,于是phone.json就变成: [ {"id":1, "name":"xioabin","number":"18824863982","age&

AngularJS 学习笔记 -- 指令(Directive)

AngularJS 指令学习笔记 AngularJS怎样处理指令其实是依赖于指令定义时返回的对象属性的,所以要想深入理解如何定义一个指令,首相需要理解指令定义时各个参数的含义. 完整的AngularJS指令参数 angular.module('app', []) .directive('demoDirective', function (){ // 依据官方规范,指令的定义时应该严格遵循驼峰式命名规则,使用时采用'-'连接单词 return { restrict : String in ['E'

angularjs学习笔记—事件指令

angularjs学习笔记—事件指令 小俞 4.4k 3月30日 发布 推荐 4 推荐 收藏 17 收藏,11.1k 浏览 ngClick 适用标签:所有触发条件:单击 #html <div ng-controller="LearnCtrl"> <div ng-click="click()">click me</div> <button ng-click="click()">click me<

AngularJS入门学习笔记一

首先声明: 本博客源自于学习:跟我学AngularJs:AngularJs入门及第一个实例.通过学习,我自己的一些学习笔记. 1.AngularJS的一些基本特性 (1)使用双大括号{{}}语法进行数据绑定: (2)使用DOM控制结构来实现迭代或者隐藏DOM片段: (3)支持表单和表单的验证: (4)能将逻辑代码关联到相关的DOM元素上: (5)能将HTML分组成可重用的组件. 他是MVC结构的,有双向数据绑定的特点.下图是双向数据绑定的图解: 使用DOM作为输入,而不是字符串,是Angular