angularjs 学习笔记 -----结构定义

1、  Module使用方法

var APP =angular.module(‘fontApp‘,[‘ngResource‘, ‘ngRoute‘, ‘ngSanitize‘]);

APP为定义的别名,之后的调用都应尽量使用该别名

‘fontApp‘ ng-app="fontApp"

新版本angular中route被分离出来,各个被使用的Providerdou需要在此处声明。

大型应用应该拆分模块来做,先定义一个服务模块,然后再加载它

angular.module(‘xmpl.service‘,[])

angular.module(‘xmpl‘, [‘xmpl.service‘])

用以下代码可以实现双向绑定,功能等同于ng-app

angular.element(document).ready(function() {

angular.bootstrap(angular.element(document.getElementById("rootOfApp")));

});

2、  angular全局定义的三种方式

  1. 用var定义global全局变量,JS方法,优先级最高
  2. .constant,定义常量,不能被修改
  3. .value,定义静态变量,不能运算,但是可以通过extend修改

此外,还可以通过factory功能来定义变量。

我用以下方式对数据进行了存放:

.constant(‘global‘,{

version: "0.1",

DataUrl: {

testUrl:  DataWeb + "index.asp"

}

});

存放中的DataWeb是用var定义的全局变量,因为在constant中没能平级调用成功。

调用时使用了

.service(‘JsonSource‘, [‘$resource‘,‘global‘,

function($resource,global) {

return $resource(global.DataUrl.testUrl, {}, { }});

}])

需要调用多个参数时只需要声明一次‘global‘,缺点是定义部分不够清晰,如果之后重构时优势不够明显,可能会把constant里的内容拆分出来一些。

3、  Service就是【单例对象】在AngluarJS 中的一个别名,保证你每次访问到的都是同一个实例,service总是一个单体,无论是哪种类型的service。

Service包含5类,constant、value、factory、service、provider。

定义service有2种方式

myModule.factory(‘serviceId’,function() {});

angular.module(‘myModule’,[],function($provide) {

$provide.factory(‘serviceId’,function() {})

})

factory会直接实例化

service会延迟实例化,被依赖或请求之后才实例化

Provider是factory的加强,一个provider中应当由一个$get函数,注入一个控制器时,我们实际上注入的是$get函数。我们可以在config阶段配置一个provider。

$provide是Angular用来创建service的接口,$provide有一个函数,decorator,也用来装饰service,在回调函数中接收一个$delegate来代表我们实际上的service实例。

4、  声明依赖

使用array notation

function myModuleCfgFn ($provide) {

$provide.factory(‘myService’,[‘dep1’,’dep2’,function(dep1,dep2){}]);

}

使用$inject属性

function myModuleCfgFn($provide) {

var myServiceFactory = function(dep1, dep2) {};

myServiceFactory.$inject = [‘dep1‘, ‘dep2‘];

$provide.factory(‘myService‘, myServiceFactory);

}

使用隐式DI(不兼容压缩混淆的代码)

function myModuleCfgFn($provide) {

  $provide.factory(‘myService‘, function(dep1, dep2) {});

}

对所使用的service类,都需要声明依赖,隐式DI是实验属性,尽量不要使用。

调用时的参数名可以随意,但顺序要和声明保持一致。

5、  template

Directive - 一个扩展现有DOM元素或者代表一个可复用的DOM组件的属性或者元素,即控件。

Directive有驼峰式(camel cased)的风格的命名。但directive也可以支蛇底式的命名(snake case)

compiler通过$interpolate服务匹配文本与属性中的嵌入表达式(如{{something}})。这些表达式将会注册为watches

compile function用于处理DOM模版的转换。一般是那种需要转换DOM模版的(如ngRepeat),或者是需要异步加载内容的(如ngView)。compile function 可以有一个返回值,类型可以是function或者object。

link function负责注册DOM事件监听器,也可以进行DOM的更新操作。link function会在模版克隆操作完毕之后执行。这里存放着directive大多数的逻辑。

attribute object - 在link()或compile()中作为参数

Markup - 通过双大括号表示法{{}}来绑定表达式到元素中,是内建的angular标记。

Filter - 用于格式化我们给用户看的数据。

Form controls - 让我们验证用户输入。

双向数据绑定的关键directive是ngModel。

6、  Scope

scope是一个指向应用model的object。它也是expression的执行上下文。scope被放置于一个类似应用的DOM结构的层次结构中。scope可以监测(watch,$watch)expression和传播事件。

每一个angular应用有且只有一个root scope,但可以拥有多个child scope。

当angular对{{username}}求值时,它首先查看与当前元素关联的scope的username属性。如果没有找到对应的属性,它将会一直向上搜索parent scope,直到到达root scope。在javascript中,这个行为被称为“原型继承”,child scope典型地继承自它们的parent。

在debugger中查看scope:在console中输入:angular.element($0).scope()

当浏览器在angular执行环境外调用javascript代码时,这意味着angular是不知道model的改变的。要正确处理model的修改,这个命令必须通过使$apply方法进入angular执行环境。

7、  Controller

在angular中,controller是一个javascript 函数(type/class),被用作扩展除了root scope在外的angular scope的实例。

angular将一个新的scope对象应用到controller构造函数(估计是作为参数传进去的意思),建立了初始的scope状态。这意味着angular从不创建controller类型实例(即不对controller的构造函数使用new操作符)。构造函数一直都应用于存在的scope对象。

controller不应该尝试做太多的事情。它应该仅仅包含单个视图所需要的业务逻辑(还有点没转过弯了,一直认为Controller就是个做转发的……)。

保持Controller的简单性,常见办法是抽出那些不属于controller的工作到service中,在controller通过依赖注入来使用这些service。

ng-controller完成了一下功能

var injector = angular.injector([‘OtherModule‘,‘ng‘]);

injector.instantiate(MyController);

8、  Internet Explorer Compatibility

为了让我们的angular应用在IE上工作,请确保:

按需引入JSON.stringify(IE7或以下的都需要这玩意)。我们可以使用JSON2(https://github.com/douglascrockford/JSON-js)或者JSON3(http://bestiejs.github.com/json3/)。

不要使用自定义标签,诸如<ng:view>(用属性版代替,如<div ng-view>)。如果还是想使用,则请看第3点。

如果你确实想使用自定义标签,那么你必须做以下步骤,让老IE认识你的自定义标签。

<!--[if lte IE 8]>

<script>

document.createElement(‘ng-include‘);

document.createElement(‘ng-pluralize‘);

document.createElement(‘ng-view‘);

// Optionally these for CSS

document.createElement(‘ng:include‘);

document.createElement(‘ng:pluralize‘);

document.createElement(‘ng:view‘);

</script>

<![endif]-->

9、  $location服务

$location服务分析浏览器地址栏中的URL(基于window.location),让我们可以在应用中较为方便地使用URL里面的东东。在地址栏中更改URL,会响应到$location服务中,而在$location中修改URL,也会响应到地址栏中。

$location 服务为只读的URL部分(absUrl,protocol,host,port)提供getter方法,也提供url,path,search,hash的getter、setter方法。

所有setter方法都返回同一个$location对象,以实现链式语法。

如果我们想让我们的Ajax应用能够被索引,我们需要在head中增加一个特殊的meta标签:<meta name="fragment" content="!" />

$location服务仅仅允许我们改变URl;它不允许我们重新加载页面(reload the page)。当我们需要改变URL且reload page或者跳转到其他页面时,我们需要使用低级点得API,$window.location.href。

$location知道angular的scope life-cycle。当浏览器的URL发生改变时,它会更新$location,并且调用$apply,所以所有$watcher和$observer都会得到通知。

angular compiler当前不支持方法的双向绑定。如果我们希望对$location对象实现双向绑定(在input中使用ngModel directive),我们需要指定一个额外的model属性(例如:locationPath),并加入两个$watch,监听两个方向上的$location更新,例如:

<input type="text" ng-model="locationPath" />

// js - controller

$scope.$watch(‘locationPath‘, function(path) {

$location.path(path);

);

$scope.$watch(‘$location.path()‘, function(path) {

scope.locationPath = path;

});

angularjs 学习笔记 -----结构定义

时间: 2024-10-01 16:11:41

angularjs 学习笔记 -----结构定义的相关文章

angularjs 学习笔记(二) ----- bootstrap框架

1.  下载新的jquery-1.11.1文件. 2.  下载新的bootstrap文件. 3.  选择流式布局的模板填充入index.html文件. 4.  将top.foot转为nginclude文件 nginclude必须使用$scope对象,因此需要设置一个全局的mainctrl来将字符串或全局变量注入$cope中. $rootScope.global =global; 直接将全局变量global赋值给$rootScope,并且之后的子$Scope会获得继承,静态定义与ctrl分开. 5

AngularJs学习笔记--directive

原版地址:http://code.angularjs.org/1.0.2/docs/guide/directive Directive是教HTML玩一些新把戏的途径.在DOM编译期间,directives匹配HTML并执行.这允许directive注册行为或者转换DOM结构. Angular自带一组内置的directive,对于建立Web App有很大帮助.继续扩展的话,可以在HTML定义领域特定语言(domain specific language ,DSL). 一.在HTML中引用direc

-_-#AngularJS学习笔记

AngularJS学习笔记 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <style> .done{display:none} .ignore{color:#999} </style> <ul> <li class="

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 学习笔记(一) -----JSONP跨站访问

1.  下载angular-seed-master-master包,解压缩后将新版本的angularJS文件放入其中. 2.  制作frontmockup文件夹(前端调用),同时制作backmockup文件夹(后端调用),使用IIS开启2个webserver(此步骤可以用其他方式替代). 3.  backmockup站点添加以下HTTP头 Access-Control-Allow-Credentials:true Access-Control-Allow-Headers:origin,x-req

AngularJs学习笔记--Guide教程系列文章索引

在很久很久以前,一位前辈向我推荐AngularJs.但当时我没有好好学习,仅仅是讲文档浏览了一次.后来觉醒了……于是下定决心好好理解这系列的文档,并意译出来(英文水平不足……不能说是翻译,有些实在是看不懂,希望大家在参观的过程中指出其中的错误).经过1个多月断断续续的努力,终于把Guide里面的文章基本上都弄出来.Guide中的部分章节,由于重复的部分似乎有点多,而且篇幅较短,这里就没有列出来. 文章列表如下: AngularJs学习笔记--bootstrap AngularJs学习笔记--ht

AngularJS学习笔记filter

filter是对数据进行过滤操作,比如按某个字段搜索.格式化数据等等,是一个非常有用的接口.下面就简单介绍下它的用法. AngularJS自带的filter接口,|是filter的分隔符,参数用:分隔: currency,格式化number,货币化,默认是转化成美元  param(number,symbol),返回值将会把数字每3位加一个逗号 <input type="number" ng-model="amount"/> <p>默认美元:{

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

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

angularjs 学习笔记1

第一次听到angularjs 是在和朋友的一次聊天当中.当时我们讨论的话题是目前流行的js框架.因为朋友是做前端的他偶然说起angularjs问我听过没.当然也不懂是干什么的.朋友说就是用来绑定数据的.我的第一感觉就是那跟knockout  差不多嘛.也就没有去深入了解过.直到在一次项目中遇到页面逻辑非常复杂的情况.那时的页面非常复杂而且逻辑很多.写起来逻辑和层次很混乱.当时我就在想有没有一个前段的框架能像后端的MVC一样进行业务逻辑的分层呢? 于是抱着这个疑问去google上搜索.于是乎发现了