ANGULAR的核心思想是什么?怎么体现在代码里?
目录
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
一.背景介绍
angular是什么?
AngularJS[1]诞生于2009年,由Misko Hevery等人创建,后为Google所收购。是一款优秀的前端JS框架,
已经被用于Google的多款产品当中。AngularJS有着诸多特性,最为核心的是:MVC、模块化、双向数据绑定、语义化标签、依赖注入等等。
AngularJS是为了克服HTML在构建应用上的不足而设计的。HTML是一门很好的伪静态文本展示设计的声明式语言,
但要构建WEB应用的话它就显得乏力了。AngularJS通过MVC模式(MVC)功能增强基于浏览器的应用,使开发和测试变得更加容易。
二.知识剖析
AngularJS的四大特性
1.使用MVC设计模式
2.双向数据绑定
3.依赖注入
4.采用模块化设计
1.使用MVC设计模式
MVC指的是 Model View Controller 模型-视图-控制器设计模式
在前端中,我们可以简单的理解为:
M-Model,数据模型,当我们需要使用到数据的时候,数据暂存在这里。通常这样表达:$scope.ppt。
V-View,视图层,一般是我们的html文件层,用于展示数据内容,如:{{ppt}}
C-Controller,控制器,控制器帮助将M层数据给V,或者当View层数据有所改变时,通知M层,M层数据也做相应 改变。可以说C是为了实现V和M之间的数据交互而存在的。
2.双向数据绑定
一但建立双向绑定,使用者输入,会由Angular自动传到一个变量中,
再自动读到所有绑到它的内容,更新它,效果上就是立即的资料同步,
在程式码中修改变量,也会直接反应到呈现的外观上。
3.依赖注入
依赖注入(Dependency Injection,简称DI)是一种设计模式,
指某个对象依赖的其他对象无需手工创建,只需要“吼一嗓子”,
则此对象在创建时,其依赖的对象由框架来自动创建并注入进来,
其实就是最少知识法则;模块中所有的service和provider两类对象,
都可以根据形参名称实现DI.
4.模块化设计
高内聚低耦合法则
1)官方提供的模块 ng、ngRoute、ngAnimate、ngTouch
2)用户自定义的模块 angular.module('模块名',[ ])
三.常见问题
怎么体现在代码?
四.解决方案
五.代码实战
Module
AngularJS中一切都是从Module模块开始的,模块是组织代码的容器,当然模块中还可以包含子模块
Routes
路由负责在应用中基于state进行页面的跳转
Views
Views是通过AngularJS编译后呈现的DOM
$scope
$scope实际上就是一个JavaScript对象,controller和view都可以访问它,所以我们可以利用它在两者间传递信息。在这个 $scope 对象里,我们既存储数据,又存储将要运行在view上的函数。$scope是连接controller和view之间的桥梁,
Controller
定义一些属性和方法用于绑定到view的元素上,一般来说,controller是比较轻量的,它里面只放一些负责view呈 现的属性和方法
Directive
指令使得AngularJS能够创建自定义的标签并实现相应的功能,可以将指令看成一种特殊的html标签
Service
Service负责提供一些通用的功能函数,比如有些数据在多个controller中都会用到,就可以定义在一个service中
六.拓展思考
1.controller与factory,service是什么关系?
答:
controller 专注于业务场景,即为特定的场景服务,所以不要重用controller,推荐通过小范围划分controller,使用父子作用域来满足业务场景。
factory 提供一些公共的方法函数,推荐抽象,重用factory。
service 类似factory,会被实例化,可以保存数据,作为controller之间的通讯工具,推荐重用。
2.双向数据绑定原理?
答:
脏检查,将原对象复制一份快照,在某个时间,比较现在对象与快照的值,如果不一样就表明发生变化,这个策略要保留两份变量,而且要遍历对象,比较每个属性,这样会有一定性能问题•angular的实现是使用脏检查
3.MVC与MVVM区别?
答:
在MVC里,View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑。 MVC模型关注的是Model的不变,所以,在MVC模型里,Model不依赖于View,但是 View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。
MVVM是将“数据模型数据双向绑定”的思想作为核心,因此在View和Model之间没有联系,通过ViewModel进行交互,而且Model和ViewModel之间的交互是双喜那个的,因此试图的数据的变化会同事修改数据源,而数据源数据的变化也会立即反应到View上。
7.参考文献
1. https://www.tuicool.com/articles/aiMvQb3 博客园
2.菜鸟教程
8.更多讨论