ng
AngularJS 诞生于2009年,由 Misko Hevery 等人建立,后为Google所收购。 是一款优秀的前端JS框架,已经被用于Google的多款产品当中。 AngularJS有着诸多特性,最为核心的是: MVC、模块化(编程)、自动化双向数据绑定、语义化标签、指令、依赖注入等等。
Single Page Application
单页Web应用(single page application,SPA),就是只有一个Web页面的应用, 是加载单个HTML页面,并在用户与应用程序交互时动态更新该页面的Web应用程序。
单页面应用程序:html
传统多页面应用程序:前端
4 能够选择性的保留状态,如音乐网站,切换页面时不会中止播放歌曲git
传统ajax的劣势:angularjs
1 ajax请求不会留下历史记录 2 用户没法直接经过URL直接进入指定页面 3 ajax对SEO不友好
ng-app
指令ng-model
指令ng-click
指令ng-
的属性称之为指令,其做用是为DOM元素绑定数据、添加事件 等<input type="text" ng-model="userName">
ng-app 指令指定了应用的根元素,一般放置在页面的根元素,也能够是任意的元素 例如:body或html标签 应用程序运行时,会自动执行边界内部的其余指令。 标记的范围尽量小,提升性能 注意:每一个页面中能够出现屡次 `ng-app` 指令(不推荐!) 若是是多个须要手动引导:`angular.bootstrap()`
ng-click="expression"
<button ng-click="val + 1"></button>
ng-model指令将尝试把属性绑定到当前做用域中。 若是当前做用域中没有该属性,那么AngluarJS会帮咱们隐式建立而且添加到当前做用域中。
ng-init="uName='Jack'"
从JS角度,使用运算符和数据 链接起来的有 结果 的代码就是:表达式 注意:不带分号 例如: 可使用 console.log(); 打印出来, 或者 console.log( expression ); 能够用做 赋值运算符 的右值 var test = expression;
<p>{{user.name}}</p> <p>{{1 + 8}}</p> <p>{{"hello" + "world"}}</p> <div ng-click="sayHi()"></div>
<body ng-app> <input type="text" ng-model="user.name" /> <p>Hello {{user.name}}</p> </body>
ng-app
告诉AngularJS让它来管理 body内部的代码ng-app
指令建立了一个对象,对象中包含了AngularJS的相关内容,例如:数据模型ng-model
指令查询数据模型中有没有 user
对象以及name
属性,没有则建立user
对象以及name
属性,并初始化name
值为:空字符串{{user.name}}
从数据模型中查找有没有该数据,若是有就取出来,并展现ng-model
和{{}}
中的 user.name 指向的是数据模型中同一个数据模块是一个容器包含了应用程序的不一样组成部分,而且这些内容必需要依附于一个模块 例如:controllers, services, filters, directives, configs 等 模块是应用程序的组成单元,例如:登陆模块、注册模块、商品列表模块 等,这些模块 组合在一块儿构成了一个完整的应用程序。
var app = angular.module(moduleName, []);
// 第一个参数:模块名称,字符串 // 第二个参数:数组,用来添加当前模块的依赖项 var app = angular.module("firstApp", ["otherModuleName"]);
var app = angular.module(moduleName);
ng-controller
指令来使用app.controller(ctrlName, callback);
app.controller("DemoController", function($scope) { // $scope 至关于当前的数据模型 });
$scope
这个名称必须这么写!$scope
是在控制器建立的时候,被注入进去的1 ng 在使用的时候,页面中只要有 ng-app 就会建立一个 scope,名字是:$rootScope 2 $scope 是 HTML(视图)背后的“男人” ----> 视图:女人,负责美(展现) $scope:男人,负责提供美的资源(数据) 3 全部的控制器都继承自 $rootScope 4 继承是按照:原型式继承 来实现 5 对于HTML来讲,参照原型式继承:子节点继承自父节点
ng-model
指令实现数据模型的值发生改变,就会致使页面值的改变;页面值的改变,也会致使数据模型中值的改变, 这种相互影响的关系就是双向数据绑定。
{{}}
表达式来实现MVC(Model–view–controller)是一种软件架构模式, 把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。 MVC是一种应用程序的设计思想(不是设计模式)
ng-app
指令包裹的HTML代码例如:移动端和PC端两个View,共享同一个Model 在MVC设计模式中, Model 响应用户请求并返回响应数据, View 负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离, 同一个 Model 能够被不一样的 View 重用,因此大大提升了代码的可重用性。
M: model 模型,至关于 User(构造函数) V: view 视图, ng-app 管理的页面 VM: ViewModel 视图模型 在Angular中就是:$scope
MVW
===> "Model View Whatever"getItem(keyName)
:读取,参数类型:stringsetItem(keyName, keyValue)
:设置,参数类型:string$scope.$watch(attrName, callback, flag);
app.controller("demoController", function($scope) { $scope.name = "jack"; // 参数一:表示监听的$scope中的属性名称,类型为:字符串 // 参数二:表示数据变化执行的回调函数,有两个参数分别是:当前值与变化以前的值 // 参数三:比较方式,false:表示比较引用;true:表示比较值。默认值为false $scope.$watch("name", function(curValue, oldValue) { // 只要被监听的数据发生变化,就会指定该回调函数中的代码! // 略过第一次执行 if(curValue === oldValue) return; }); });
ng-app
指令启动angular.bootstrap(document, ['MyModule'])
// 等待文档加载完成后,启动 angular angular.element(document).ready(function() { angular.bootstrap(document, ['MyModule']); });
ng-app
ng-app
而且启动,若是启动其余的,须要手动启动<div ng-app="FirstApp"></div> <div ng-app="SecondApp"></div>
使用jQuery的思路: 1 想要获取元素,我调用 $(selector) 2 元素绑定事件,我调用 .on() 3 进行什么DOM操做,我调用什么方法完成 总结:你告诉jQuery你要作的操做,jQuery就能帮你作好。 **在使用库的过程当中,开发人员是 控制者**
Angular提供了一套完整的解决方案,全部的流程都设定好了 咱们只须要按照流程规则,把咱们的代码进行填坑。