发表于: 2017-01-09 23:38:23
2 1337
困惑
angular版本那么多,光angular 1 的个版本之间就有不少差异,那么到底应该选择哪一个来用呢?
今天做的事
看angular,对着例子一个一个敲,发现不同版本的angular差异真的是,,好多比较老的教材的例子如果用较新的版本是会报错的
明天计划
继续基础
收获
angular会记录数据模型所包含的数据在任何特定时间点的值,而不是原始值
当angular认为某个值可能发生变化时,会运行自己的事件循环来检查这个值是否变“脏”,若该值自上次事件循环时执行脏检查,则该值被认为是“脏值”。这也是angular可以跟踪和响应应用变化的方式
这个事件循环调用$digest()循环
这个过程为脏检查
mvc(model view controller 模型-视图-控制器)模型中包含应用的数据和与数据进行交互的方法,试图将数据呈现给用户,控制器则是二者之间的桥梁
数据模型对象是指 $scope对象,其是一个简单的js对象,其中的属性可以被试图访问,也可以跟控制器交互,双向数据绑定意味着如果试图改变了某个值,数据模型会通过脏检查观察到这个变化,而如果数据模型改变了某个值,试图也会依据变化重新渲染
$scope对象(作用域对象)是定义应用业务逻辑,控制器方法和视图属性的地方,是控制器和视图之间的胶水,在应用将视图渲染并呈现给用户之前,视图中的模板回和作用于进行连接,然后应用会对dom进行设置以方便将属性变化通知给angularjs
作用域是应用状态的基础。
angular中将$scope设计成和dom类似的结构,因此$scope可以进行嵌套,也就是说我们可以引用父级$scope中的属性
angular将应用的业务逻辑都放在控制器中,而将相关的数据都放在控制器的作用域中
$scope对象的生命周期处理有四个阶段
创建:在创建控制器或指令时,angular会用$injector创建一个新的作用域,并在这个新建的控制器或指令运行时将作用域传递进去
链接:当angular开始运行时,所有的$scope对象都会附加或者链接到视图中。所有创建其的函数也会将自身附加到视图中,这些作用域将会注册当angular应用上下文中发生变化时需要运行的函数,这些函数成为$watch函数,angular通过这些函数获知何时启动事件循环
更新:当事件循环运行时,它通常执行在顶层$scope对象上($rootscope),每个自作用于都执行自己的脏值检测。每个监控函数都会检查变化,若检测到变化则触发制定回调函数
销毁:当它不再被需要时,这个作用域将会清理和销毁自己
指令:将dom元素增强胃可复用的dom组件的属性或元素
值绑定:模板语法{{}}可以将表达式绑定到视图上
过滤器:可以在视图中使用的函数,用来进行格式化
表单控件:用来检验用户输入的控件
作用域的作用
提供观察者以监视数据模型的变化
可以将数据模型的变化通知给整个应用,甚至系统外的组件
可以进行嵌套,隔离业务功能和数据给表达式提供运算时所需的执行环境
使用ng-controller指令将一个控制器对象附加到dom元素上
控制器的作用是增强视图,是一个函数,用来向视图的作用域中添加额外的功能,我们用它来给作用域对象设置初始状态,并添加自定义行为
控制器并不适合执行dom操作,格式化,或者数据操作,以及除存储器数据模型之外的状态维护操作,只是试图和$scope之间的桥梁
angular允许在$scope上设置包括对象在内的任何类型的数据,并在视图中展示对象的属性
表达式
所有的表达式都在其所属的作用域内部执行,并有访本地$scope的权限;
如果表达式发生了TypeError和ReferenceError并不会抛出异常;
不允许使用任何流程控制功能(条件控制,例如if/eles);
可以接受过滤器和过滤器链。
对表达式的任何操作,都会在其所属作用域内部执行,因此可以在表达式内部调用那些限制在此作用域内的变量,进行循环,函数调用,将变量用在数学表达式中的操作
要在字符串模板中做插值操作,需要在你的对象中注入$interpolate服务。
$interpolate服务是一个可以接受三个参数的函数,其中第一个参数是必需的。
text(字符串):一个包含字符插值标记的字符串。
mustHaveExpression(布尔型):如果将这个参数设为true,当传入的字符串中不含有表达式时会返回null。
trustedContext(字符串): AngularJS会对已经进行过字符插值操作的字符串通过
$sec.getTrusted()方法进行严格的上下文转义。
$interpolate服务返回一个函数,用来在特定的上下文中运算表达式。
过滤器本质上是一个会把我们输入的内容当作参数传入进去的函数。
通过AngularJS模块API中的.directive()方法,我们可以通过传入一个字符串和一个函数来
注册一个新指令。其中字符串是这个指令的名字,指令名应该是驼峰命名风格的,函数应该返回
一个对象。
声明指令本质上是在html中通过元素,属性,类或注释来添加功能
<my-directive></my-directive>
<div my-directive></div>
<div class="my-directive"></div>
<div my-directive></div>
<div class="my-directive"></div>
<!--directive:my-directive-->
始终用属性来声明指令,会给以后带来方便,因为它有比较好的跨浏览器兼容性
<div my-directive></div>
为了更加明确我们的意图,将restrict设置为字母A(代表attribute):
为了更加明确我们的意图,将restrict设置为字母A(代表attribute):
restrict: 'A
分享
今天分享的内容是媒体查询,为了响应式,在不同屏幕大小的时候写入不同样式
评论