AngularJS

AngularJS

AngularJS 是一个 JavaScript 框架。它可通过 <script> 标签添加到 HTML 页面。
AngularJS 指令是以 ng 作为前缀的 HTML 属性。
AngularJS有很多的模块和控制器,而每个模块都对应一个控制器,他们之间使用
Scope来进行传值,有一个根作用域rootScope,每个控制器都可以使用这个属性。
控制器也可以从外部引用。
angular.module('myApp', []).controller('namesCtrl', function($scope) { 方法 });

模块定义了一个应用程序。
模块是应用程序中不同部分的容器。
模块是应用控制器的容器。
控制器通常属于一个模块。

引用:<script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script>

ng-app 指令告诉 AngularJS,<div> 元素是 AngularJS 应用程序 的"所有者"。
ng-model 指令把输入域的值绑定到应用程序变量 name。
ng-bind 指令把应用程序变量 name 绑定到某个段落的 innerHTML。

AngularJs的主要使用是:
首先选中一个div,定义他的模块(Module)和控制器(Controller);
<div ng-app="myApp" ng-controller="myCtrl">...</div>
然后在script里面进行代码书写:
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {$scope.firstName= "John"; $scope.lastName= "Doe";});

可以使用 ng-init=" 变量 字符串 对象 数组 "来初始化数据
数据的呈现有两种方式:
- 通过大括号的方式包含住数据;
{{ quantity * cost }} ||| {{ firstName + " " + lastName }}
- 通过ng-bind来绑定数据到html中;
ng-bind="person.lastName" ||| ng-bind="points[2]"

AngularJS 指令

完整的指令:http://www.runoob.com/angularjs/angularjs-reference.html

ng-app 指令初始化一个 AngularJS 应用程序。
ng-init 指令初始化应用程序数据。
ng-model 指令把元素值(比如输入域的值)绑定到应用程序。
ng-bind 指令把数据和元素绑定在一起。
ng-repeat 指令把数据循环输出。
ng-repeat="x in names"然后把x绑定在html中,也可以循环对象数组。

》》ng-model指令的扩展:《《
ng-model 指令根据表单域的状态添加/移除以下类:
ng-valid ---当表单中输入内容之后此方法为true
ng-invalid ---当表单中未输入内容的时候此方法为true
ng-pristine ---当用户未修改表单的时候发生
ng-touched ---- 当与用户交互之后发生
ng-untouched ----当没有与用户进行交互的时候发生
ng-dirty ----当表单中的值发生改变的时候
ng-pending ---
ng-empty ---
ng-not-empty ---
ng-blur ------当这个元素失去焦点的时候执行其中的方法
ng-change ---当输入的值发生了修改之后发生
ng-checked ----用于设置复选框(checkbox)或单选按钮(radio)的 checked 属性。
ng-class 指令用于给 HTML 元素动态绑定一个或多个 CSS 类。
ng-class-even 指令用于为 HTML添加CSS 类,但只作用于偶数行,需要与 ng-repeat 指令搭配使用
ng-class-odd 指令用于为 HTML 添加 CSS 类,但只作用于奇数行,需要与 ng-repeat 指令搭配使用
ng-cloak 指令用于在 AngularJS 应用在加载时防止 AngularJS 代码未加载完而出现的问题。
ng-controller 指令用于为你的应用添加控制器
ng-copy 指令用于告诉 AngularJS 在 HTML 元素文本被拷贝时要执行的操作。
ng-dblclick 指令用于告诉 AngularJS 在鼠标鼠标 HTML 元素时需要执行的操作。

自定义指令:
你可以使用 .directive 函数来添加自定义的指令。
使用自定义的指令有四种方式:元素名 , 属性 , 类名, 注释。
也可以指定一个自定义命令的使用方式,通过 restrict 属性
-E 作为元素名使用
-A 作为属性使用
-C 作为类名使用
-M 作为注释使用

         自定义指令
   <body ng-app="myApp"  ng-controller="myCtrl" >   ----初始化ng-app 指定控制器
    <runoob-directive></runoob-directive>  ---元素名
    <div runoob-directive></div>    ----属性
    <div class="runoob-directive"></div>    ---类名
    <!-- directive: runoob-directive -->   ----注释
    <script>
     var app = angular.module("myApp", []);   ---关联html
     app.directive("runoobDirective", function() {    ---创建自定义指令
     return {
       restrict : "A",   -----指定使用的方式
       template : "<h1>自定义指令!</h1>"   ----自定义指令的模版
         };
     });
     app.controller('myCtrl', function($scope) {    ---- 控制器:进行数据的运算
      $scope.firstName= "John";
      $scope.lastName= "Doe";
     });
    </script></body>

Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带。
Scope 是一个对象,有可用的方法和属性。
Scope 可应用在视图和控制器上。
方法:$scope.fullName = function() { return $scope.firstName + " " + $scope.lastName;}

根作用域
所有的应用都有一个 rootScope,它可以作用在 ng-app 指令包含的所有 HTML 元素中。
$rootScope 可作用于整个应用中。是各个 controller 中 scope 的桥梁。用 rootscope 定义的值,可以在
各个 controller 中使用。rootscope设置的变量在所有controller里面都是可以直接用{{root.变量名}}来显示
的,当然也可以赋值给scope.

AngularJS 过滤器

过滤器可以通过一个管道字符(|)和一个过滤器添加到表达式中。
{{ lastName | uppercase }} ----把数据转化为大写;
{{ lastName | lowercase }} ---把数据转化为小写;
(quantity * price) | currency }} ---把数据转换为货币;

过滤器可以通过一个管道字符(|)和一个过滤器添加到指令中。
orderBy 过滤器根据表达式排列数组:ng-repeat="x in names | orderBy:'country'"
orderBy 根据后面的变量对数组进行排序处理。
filter 过滤器从数组中选择一个子集:ng-repeat="x in names | filter:test | orderBy:'country'"
fillter 意思就是根据输入的数据在数组中进行查找可以匹配的子集。

可以自定义过滤器:
app.filter('reverse', function() { ---可以注入依赖
return function(text) {
return text.split("").reverse().join("");
}
}); ----定义一个名字为reverse的过滤器:反转字符串

AngularJS 服务(Service)----------待完善……

在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用。
AngularJS 内建了30 多个服务。

AngularJS当中的http服务:

  // 简单的 GET 请求,可以改为 POST
    $http({
        method: 'GET',
        url: '/someUrl'
    }).then(function successCallback(response) {
            // 请求成功执行代码
        }, function errorCallback(response) {
            // 请求失败执行代码
    });
        //get和post请求的简写方法
      $http.get('/someUrl', config).then(successCallback, errorCallback);
      $http.post('/someUrl', data, config).then(successCallback, errorCallback);

AngularJS Select(选择框)

使用 ng-options 创建选择框:
<select ng-init="selectedName = names[0]" ng-model="selectedName" ng-options="x for x in names"></select>
使用ng-options指令来循环数组names存储在x变量中,然后从他上面提取x。

使用ng-repeat 指令来创建下拉列表:
<select>
<option ng-repeat="x in names">{{x}}</option> ----列表项
</select>

当循环的数据为一个数组的时候:
<select ng-model="selectedSite" ng-options="x.site for x in sites">
</select>
<h1>你选择的是: {{selectedSite.site}}</h1>
<p>网址为: {{selectedSite.url}}</p>
$scope.sites = [
{site : "Google", url : "http://www.google.com"},
{site : "Runoob", url : "http://www.runoob.com"},
{site : "Taobao", url : "http://www.taobao.com"}
];
使用ng-options指令来循环数组sites,存储在x中,而for前面的值为下拉列表中显示的数据,

当循环的数据为一个对象的时候:
<select ng-model="selectedCar" ng-options="y.brand for (x, y) in cars"></select>
<p>你选择的是: {{selectedCar.brand}}</p>
<p>型号为: {{selectedCar.model}}</p>
<p>颜色为: {{selectedCar.color}}</p>
$scope.cars = {
car01 : {brand : "Ford", model : "Mustang", color : "red"},
car02 : {brand : "Fiat", model : "500", color : "white"},
car03 : {brand : "Volvo", model : "XC90", color : "black"}
}
使用ng-options来循环对象,for后面的小括号中变量代表的是,健和值。

使用ng-options来设置下拉列表的时候,for前面的值只是下拉列表中显示的选项,而for后面的值分为两种情况,当循环的数组的时候,直接一个变量代表的是数组中的每一个值,当循环的是一个对象的时候,for后面的小括号中有两个变量名,分别是键和值。也就是对象中的名字和属性。

AngularJS 表格

ng-repeat 指令可以完美的显示表格:
<table>
<tr ng-repeat="x in names">
<td>{{ $index + 1 }}</td> -----显示序号
<td>{{ x.Name }}</td>
<td>{{ x.Country }}</td>
</tr>
</table>
每一行循环一个数据,也可以给table添加样式。

AngularJS 事件

ng-show 指令 为true的时候显示元素
<p ng-show="true">显示</p>
ng-hide 指令 为 true的时候隐藏元素
<p ng-hide="true">隐藏</p>
ng-click指令 点击事件
<button ng-click="count = count + 1">点我</button> ----点击增加数量

AngularJS 表单

以下 HTML input 元素被称为 HTML 控件:

input 元素
select 元素
button 元素
textarea 元素
Input 控件使用 ng-model 指令来实现数据绑定。
checkbox 的值为 true(选中) 或 false,可以使用 ng-model 指令绑定;
单选框使用同一个 ng-model ,可以有不同的值,但只有被选中的单选按钮的值会被使用。
下拉菜单同样也可以绑定值。

表单的验证:

<input type="text" name="user" required > required-----意思是必填字段
ng-disabled="true" 禁用或者使用输入框或者是按钮,直接加入到标签中

AngularJS动画

引入动画:
<script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script>
<script src="https://cdn.staticfile.org/angular.js/1.4.6/angular-animate.min.js"></script>

动画的使用需要先加入到模型中,直接设置为应用名ng-app="ngAnimate"
也可以加入到模型中,var app = angular.module('myApp', ['ngAnimate']);
如果需要隐藏一个元素,需要给他添加动画transition。然后设计隐藏时的动画 .ng-hide{ 动画效果 }

.ng-hide {   //隐藏动画效果
  height: 0;    //宽边为0
  width: 0;      //高变为0
  background-color: transparent;  //背景颜色透明
  top:-100px;    //上移100px
  left: 200px;     //距离左边200px
}

AngularJS 指令

ng-app | 定义应用程序的根元素。 |
ng-bind | 绑定 HTML 元素到应用程序数据 |
ng-blur | 规定 blur 事件的行为 |
ng-focus | 规定聚焦事件的行为 |
ng-change | 规定在内容改变时要执行的表达式 |
ng-checked | 规定元素是否被选中 |
ng-class | 指定 HTML 元素使用的 CSS 类 |
ng-class-even | 类似 ng-class,但只在偶数行起作用 |
ng-class-odd | 类似 ng-class,但只在奇数行起作用 |
ng-click | 定义元素被点击时的行为 |
ng-cloak | 在应用正要加载时防止其闪烁 |
ng-controller | 定义应用的控制器对象 |
ng-copy | 规定拷贝事件的行为 |
ng-csp | 修改内容的安全策略 |
ng-cut | 规定剪切事件的行为 |
ng-dblclick | 规定双击事件的行为 |
ng-disabled | 规定一个元素是否被禁用 |
ng-hide | 隐藏或显示 HTML 元素 |
ng-href | 为 the <a> 元素指定链接 |
ng-if | 如果条件为 false 移除 HTML 元素 |
ng-init | 定义应用的初始化值 |
ng-keydown | 规定按下按键事件的行为 |
ng-keypress | 规定按下按键事件的行为 |
ng-keyup | 规定松开按键事件的行为 |
ng-list | 将文本转换为列表 (数组) |
ng-model | 绑定 HTML 控制器的值到应用数据 |
ng-model-options | 规定如何更新模型 |
ng-mousedown | 规定按下鼠标按键时的行为
ng-mouseenter | 规定鼠标指针穿过元素时的行为 |
ng-mouseleave | 规定鼠标指针离开元素时的行为 |
ng-mousemove | 规定鼠标指针在指定的元素中移动时的行为 |
ng-mouseover | 规定鼠标指针位于元素上方时的行为 |
ng-mouseup | 规定当在元素上松开鼠标按钮时的行为 |
ng-non-bindable | 规定元素或子元素不能绑定数据 |
ng-open | 指定元素的 open 属性 |
ng-options | 在 <select> 列表中指定 <options> |
ng-paste | 规定粘贴事件的行为 |
ng-readonly | 指定元素的 readonly 属性 |
ng-repeat | 定义集合中每项数据的模板 |
ng-selected | 指定元素的 selected 属性 |
ng-show | 显示或隐藏 HTML 元素 |
ng-src | 指定 <img> 元素的 src 属性 |
ng-srcset | 指定 <img> 元素的 srcset 属性 |
ng-style | 指定元素的 style 属性 |
ng-submit | 规定 onsubmit 事件发生时执行的表达式 |
ng-switch | 规定显示或隐藏子元素的条件 |
ng-value | 规定 input 元素的值 |

AngularJS API

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

推荐阅读更多精彩内容