AngularJs笔记

Controller构造

controller(name, constructor)

Param Type Details
name string/Object Object Controller name, or an object map of controllers where the keys are the names and the values are the constructors.
constructor Function Controller constructor function.

constructorcontroller的构建函数,我们需要依赖一些其它库来构建一个controller。这个时候angular就用到了一项技术,叫做依赖注入,dependency inject。

比如说我新建一个controller,需要从服务器上获取点数据,也就是ajax,angular.有个对应的库叫做$http。代码就这样写:

controller("myctrl",function($scope,$http){ 
.... 
})

这时候你就可以在构建函数内访问并$http了。如果根据业务扩展的需要,我还要获得并修改浏览器的url,这时候就需要$location:

controller("myctrl",function($scope,$location,$http){ 
.... 
})

$location$http的位置颠倒也没问题。也就是说如果你需要什么库,直接在构造函数的参数里把需要的东西写出来就行了,angular会自动获取那个库并传递给构造函数。有没有觉得很神奇?!
angular是怎么知道构造函数的参数是什么的?

(function($scope,$http,$location){}).toString()

运行这段代码你就懂了。toString可以将函数的源代码输出成字符串,通过解析这段字符串来得知他的参数以及名称。
但是这样会遇到一个问题,当我使用压缩工具来压缩源码之后,函数的参数名都会变,怎么办?
function($scope,$location,$http){}
压缩后成了
function(a,b,c){}
这时候就需要将构建函数替换为一个数组,数组最后一个元素为构建函数,其它为参数。

controller("myctrl",[ "$scope", "$location", "$http", function(a,b,c){

}])

现在知道
controller("myctrl",[ "$scope", function($scope){ ... }])的作用了吧.其实function里面的$scope这个变量名是可以任意的.

常用指令

加载指令-->编译指令compile-->链接指令link

ng-repeat

循环

<div ng-app="" ng-init="names=[
{name:'Jani',country:'Norway'},
{name:'Hege',country:'Sweden'},
{name:'Kai',country:'Denmark'}]">
<p>循环对象:</p>
<ul>
  <li ng-repeat="x  in names">
    {{ x.name + ', ' + x.country }}
  </li>
</ul>
</div>
ng-transclude

会保留指令内部内容, 可以让指令之间嵌套使用.

myApp.directive("hello", function(){
  return {
      restrict: "AE",
      transclude: true,
      template: "<div>Hello,自定义标签!<div ng-transclude></div></div> "
  }
});
----------
<hello><div>这是标签内部内容</div></hello>
-------------
显示如下:
Hello,自定义标签!
这是标签内部内容
创建自定义的指令

内置的指令外,我们还可以创建自定义指令。
你可以使用 .directive 函数来添加自定义的指令。
要调用自定义指令,HTML 元素上需要添加自定义指令名。
使用驼峰法来命名一个指令runoobDirective, 但在使用它时需要以 - 分割, runoob-directive.

模板有:
template, templataUrl, tamplateCache

restrict 值可以是以下几种:

  • E 作为元素名使用,默认, attribute
  • A 作为属性使用, element
  • C 作为类名使用, class
  • M 作为注释使用,此时要添加replace:true, comment
    例如:
<html ng-app="myApp">
<head>
    <meta charset="utf-8">
    <title>My AngularJS App</title>
</head>
<body>
<runoob-directive></runoob-directive>
<div runoob-directive></div>
<div class="runoob-directive"></div>
<!-- directive: runoob-directive -->
</body>
<script src="https://cdn.bootcss.com/angular.js/1.5.8/angular.min.js"></script>
<script>
    var app = angular.module("myApp", []);
    app.directive("runoobDirective", function() {
        return {
            restrict: "EACM",
            replace : true,
            //scope: {}, //会使指令有个单独作用于,不会相互影响  
            template : "<h1>自定义指令!</h1>" 
            // templateUrl: "hello.html"; 
            //template: templateCache.get('hello.html')
        };
    });
</script>
</html>
scope的绑定策略
指令 作用
@ 把当前属性作为字符串传递,还可以绑定来自外层的scope的值,在属性值插入{{}}即可
= 与父scope中 的属性进行双向绑定
& 传递一个来自父scope的函数,稍后调用.

AngularJS 过滤器

过滤器 描述
currency 格式化数字为货币格式。
filter 从数组项中选择一个子集。
lowercase 格式化字符串为小写。
orderBy 根据某个表达式排列数组。
uppercase 格式化字符串为大写。

事件传播

$emit('MyEvent'),向上传播
$broadcast('MyEvent'), 向下传播

bower.json 依赖 ~, ^,>等符号含义

  • ~version In the simplest terms, the tilde matches the most recent minor version (the middle number). ~1.2.3 will match all 1.2.x versions but will miss 1.3.0. "Approximately equivalent to version" See npm semver - Tilde Ranges & semver (7)
  • ^version The caret, on the other hand, is more relaxed. It will update you to the most recent major version (the first number). ^1.2.3 will match any 1.x.x release including 1.3.0, but will hold off on 2.0.0. "Compatible with version" See npm semver - Caret Ranges & semver (7)
  • version Must match version exactly
  • >version Must be greater than version
  • >=version etc
  • <version
  • <=version 1.2.x 1.2.0, 1.2.1, etc., but not 1.3.0
  • http://sometarballurl (this may be the URL of a tarball which will be downloaded and installed locally
  • * Matches any version

http://stackoverflow.com/questions/22343224/difference-between-tilde-and-caret-in-package-json

自定义过滤器 filter

ng-bind

使用ng-bind代替{{ }}取值,可避免因为加载过慢导致出现{{}}的情况.两种方法分情况使用,各有自己的单独作用范围.

<p> hello, {{ name }}</p>

<p>hello, <span ng-bind="name"></span><p>

AngularJs常用插件

angular-translate

用于国际化, 地址https://angular-translate.github.io/

angular-ui-router / ui-router

angular路由管理,地址https://ui-router.github.io/

ocLazyLoadProvider

延时加载, 地址https://oclazyload.readme.io/

angular-smart-table

支持表格排序,过滤,搜索,分页,总是很强大.
http://lorenzofox3.github.io/smart-table-website/

ngStorage

支持本地存储和session存储.地址https://github.com/gsklee/ngStorage

angular-breadcrumb

基于ui-router的导航插件.
地址[https://github.com/ncuillery/angular-breadcrumb)[https://github.com/ncuillery/angular-breadcrumb]

angular-toastr

弹出层通知.
https://github.com/Foxandxss/angular-toastr

  • 标签的属性, 如果使用驼峰法定义的话, 调用时要用全部写.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容