AngularJS是什么:
AngularJS特性和优点:
与jQuery的比较:
AngularJS能做什么项目:
步骤:
<script type='text/javascript' src="../../vendor/angular/angularjs.js">script>
<html ng-app="">
<head lang="en">
<meta charset="UTF-8">
<title>title>
head>
<body>
<input type="text" placeholder="用户名" ng-model="username">
<p>你输入的用户名为: {
{username}}p>
body>
<script type='text/javascript' src="../../vendor/angular/angularjs.js">script>
html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>title>
head>
<script type="text/javascript" src="../../vendor/jQuery/jquery-1.11.1.js">script>
<script type="text/javascript">
$(function () {
$('#name').keyup(function () {
var name = this.value;
$('#resultSpan').html(name);
});
});
script>
<body>
<input type="text" name="username" id="name">
<p>你输入的用户名为:<span id="resultSpan">还未输入span>p>
body>
html>
双向数据绑定:
数据可以从View流向Model, 也可以从Model流向View
依赖注入(DI):
依赖的对象被自动注入进来:Dependency Injection
①形参必须是特定的名称, 否则Angular无法注入抛异常
MVC模式:
View与Model之间的桥梁
储存数据的容器
提供操作数据的方法
初始化Model数据
为Model添加行为方法
M-V-VM模式:
MVVM是MVC的进化版, Angular使用的就是M-V-VM:
①在angular中MVVM模式主要分为四部分:
<1>View:它专注于界面的显示和渲染,在angular中则是包含一堆声明式Directive的视图模板。
<2>Model:它是与应用程序的业务逻辑相关的数据的封装载体,它是业务领域的对象,Model并不关心会被如何显示或操作,所以模型也不会包含任何界面显示相关的逻辑。也就是Angular中的Service
<3>ViewModel:它是View和Model的粘合体,负责View和Model的交互和协作,它负责给View提供显示的数据,以及提供了View中Command事件操作Model的途径;也就是Angular中的scope
<4>Controller:这并不是MVVM模式的核心元素,但它负责ViewModel对象的初始化,它将组合一个或者多个service来获取业务领域Model放在ViewModel对象上,使得应用界面在启动加载的时候达到一种可用的状态。
Model/模型:
①scope中的各个数据对象
②数据模型
View/视图:
①html/css/directive/expression
②显示VM中的数据
③与用户交互
ViewModel/视图模型:
①scope对象
②View和Model的交互和协作
③给View提供显示的数据
④提供了View中Command事件操作Model的途径
作用域(scope):
一个js实例对象, ng-app指令默认会创建一个根作用域对象($rootScope)
控制器(controller):
用来控制AngularJS应用数据的JavaScript 实例对象
ng-controller : 指定控制器构造函数, Angular会自动new此函数创建控制器对象
同时Angular还有创建一个新的域对象$scope, 它是$rootScope的子对象
模块(module):
模块(module)也是一个对象
angular.module('模块名', [依赖的模块])
module.controller('MyController', function($scope){
//操作$scope的语句
})
angular的整体设计也是多模块的:
ng:
AngularJS的默认模块,包含AngularJS的所有核心组件。ngRoute:
AngularJS是一套前端的MVC框架。那么,为了实现视图的中转,肯定会涉及到路由的概念。ngRoute即是AngularJS的路由模块。ngAnimate:
AngularJS的动画模块,使用ngAnimate各种核心指令能为你的应用程序提供动画效果。动画可使用css或者JavaScript回调函数。ngAria:
使用ngaria为指令注入共同的可达性属性和提高残疾人用户体验。ngResource:
当查询和发送数据到一个REST 服务器时,使用ngResource模块。ngCookies:
ngCookies模块提供了一个方便的包用于读取和写入浏览器的cookies。ngTouch:
ngTouch模块提供触摸事件,方便的应用于移动触摸设备。它的实现是实现是基于jQuery移动触摸事件处理。ngSanitize:
ngSanitize模块可安全地在你的应用程序中解析和操作HTML数据。ngMessages:
AngularJS表单验证模块。ngMessages模块完美的实现了很多表单验证的常用功能,简化你的开发流程。表达式:
语法: { {expression}}
基本类型数据: number/string/boolean
表达式和语句的区别:
指令:
Angular为HTML页面扩展的属性,标签
与Angular的Model交互,扩展页面的动态表现力
ng-app:
指定模块名,angular管理的区域ng-model:
双向绑定,输入相关标签ng-controller:
指定控制器构造函数名,内部会自动创建一个新的子作用域(外部的)ng-init:
初始化数据ng-click:
调用作用域对象的方法(点击时)可以传$eventng-repeat:
遍历数组显示数据, 数组有几个元素就会产生几个新的作用域ng-bind:
解决使用{ {}}显示数据闪屏(在很短时间内显示{ {}})ng-show:
布尔类型, 如果为true才显示ng-hide:
布尔类型, 如果为true就隐藏ng-class:
动态引用定义的样式 {aClass:true, bClass:false}ng-style:
动态引用通过js指定的样式对象 {color:‘red’, background:‘blue’}ng-mouseenter:
鼠标移入监听, 值为函数调用, 可以传$eventng-mouseleave:
鼠标移出监听, 值为函数调用, 可以传$event过滤器:
作用: 在显示数据时可以对数据进行格式化或过滤
,滤器可以使用一个管道字符(|)添加到表达式和指令中。
常用过滤器:
currency:
货币格式化(文本)number:
数值格式化(文本)date:
将日期对象格式化(文本)json:
将js对象格式化为json(文本)lowercase :
将字符串格式化为全小写(文本)<div ng-app="myApp" ng-controller="personCtrl">
<p>姓名为 {
{ lastName | lowercase }}p>
div>
uppercase :
将字符串格式化全大写(文本)limitTo :
从一个数组或字符串中过滤出一个新的数组或字符串orderBy :
根据指定作用域属性对数组进行排序<div ng-app="myApp" ng-controller="namesCtrl">
<ul>
<li ng-repeat="x in names | orderBy:'country'">
{
{ x.name + ', ' + x.country }}
li>
ul>
div>
filter :
从数组中过滤返回一个新数组服务(Service):
在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用。
Angular的很多服务,在DOM中有对应的对象,那为什么不使用这些对象,而是要用服务呢?
$location服务:
– | window.location | $location.service |
---|---|---|
目的 | 允许对当前浏览器位置进行读写操作 | 允许对当前浏览器位置进行读写操作 |
API | 暴露一个能被读写的对象 | 暴露jquery风格的读写器 |
是否在AngularJS应用生命周期中和应用整合 | 否 | 可获取到应用生命周期内的每一个阶段,并且和$watch整合 |
是否和HTML5 API的无缝整合 | 否 | 是(对低级浏览器优雅降级) |
和应用的上下文是否相关 | 否,window.location.path返回"/docroot/actual/path" | 是,$location.path()返回"/actual/path" |
$http 服务:
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http) {
$http.get("welcome.htm").then(function (response) {
$scope.myWelcome = response.data;
});
});
$watch服务:
<div ng-app="myApp" ng-controller="myCtrl">
<b>请输入姓名:b><br>
<b>姓:b><input type="text" ng-model="lastName"><br>
<b>名:b><input type="text" ng-model="firstName"><br>
<h1>{
{ lastName + " " + firstName }}h1>
<h2>{
{ fullName }}h2>
div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.lastName = "";
$scope.firstName = "";
//监听lastName的变化,更新fullName
$scope.$watch('lastName', function() {
$scope.fullName = $scope.lastName + " " + $scope.firstName;
});
//监听firstName的变化,更新fullName
$scope.$watch('firstName', function() {
$scope.fullName = $scope.lastName + " " + $scope.firstName;
});
});
script>
angular控制器、服务和指令三者之间的关系:
服务负责从远端服务器抓取和存储数据。
基于服务构建的控制器将为angular的作用域层次提供数据和功能。
基于服务和控制器构建的指令将直接与文档对象模型(DOM)元素进行交互
provider(供应商):
provide服务负责告诉Angular如何创造一个新的可注入的东西:即服务。
myMod.config(function($provide) {
$provide.provider('greeting', function() {
this.$get = function() {
return function(name) {
alert("Hello, " + name);
};
};
});
});
简介:
ngRoute即是AngularJS的路由模块。
在ngRoute中,主要有$route、$routeProvider、$routeParams三个服务项目。
$routeProvider用于在主应用主模块的配置方法中。$route与$routeParams一般常见于控制器中。
使用:
http://runoob.com/#!/first
http://runoob.com/#!/second
http://runoob.com/#!/third
<html>
<head>
<meta charset="utf-8">
<title>AngularJS 路由实例 - 菜鸟教程title>
<script src="https://cdn.bootcss.com/angular.js/1.7.0/angular.min.js">script>
<script src="https://cdn.bootcss.com/angular.js/1.7.0/angular-route.min.js">script>
head>
<body ng-app='routingDemoApp'>
<h2>AngularJS 路由应用h2>
<ul>
<li><a href="#!/">首页a>li>
<li><a href="#!/computers">电脑a>li>
<li><a href="#!/printers">打印机a>li>
<li><a href="#!/blabla">其他a>li>
ul>
<div ng-view>div>
<script>
angular.module('routingDemoApp',['ngRoute'])
.config(['$routeProvider', function($routeProvider){
$routeProvider
.when('/',{
template:'这是首页页面'})
.when('/computers',{
template:'这是电脑分类页面'})
.when('/printers',{
template:'这是打印机页面'})
.otherwise({
redirectTo:'/'});
}]);
script>
body>
html>
路由设置对象:
$routeProvider.when(url, {
template: string,
templateUrl: string,
controller: string, function 或 array,
controllerAs: string,
redirectTo: string, function,
resolve: object<key, function>
});
.when('/computers',{template:'这是电脑分类页面'})
$routeProvider.when('/computers', { templateUrl: 'views/computers.html', });
模块组件:
ngView 提供不同路由模板插入的视图层
$routeProvider 提供路由配置
$routeParams 解析返回路由中带有的参数
$route 用于构建各个路由的url、view、controller这三者的关系
cokkie:
sessionStorage(会话存储):
localStorage(永久存储):