发表于: 2017-05-30 21:20:53
1 1090
今天完成的事情:
1.完成了任务6,由于没有采用bootstrap写,所以耗费了一些时间;
2.学习了angular的数据绑定:
***什么叫双向数据绑定?
个人理解无非是从界面的操作能实时反映到数据,数据的变更能实时展现到界面。
一个简单的例子:
<div ng-controller="CounterCtrl">
<span ng-bind="counter"></span>
<button ng-click="counter++">increase</button>
</div>
<script>
function CounterCtrl($scope) {
$scope.counter = 1;
}
</script>
上面这个例子代表的就是每点击一次按钮,界面上的数字就会加1.
***脏检查机制
脏检查机制:Angular将双向绑定转换为一堆watch表达式,然后递归这些表达式检查是否发生过变化,如果变了则执行相应的watcher函数(指view上的指令,如ng-bind,ng-show等或是{{}})。等到model中的值不再发生变化,也就不会再有watcher被触发,一个完整的digest循环就完成了。
脏检查机制的触发:Angular中在view上声明的事件指令,如:ng-click、ng-change等,会将浏览器的事件转发给$scope上相应的model的响应函数。等待相应函数改变model,紧接着触发脏检查机制刷新view。
watch表达式:可以是一个函数、可以是$scope上的一个属性名,也可以是一个字符串形式的表达式。$watch函数所监听的对象叫做watch表达式。
watcher函数:指在view上的指令(ngBind,ngShow、ngHide等)以及{{}}表达式,他们所注册的函数。每一个watcher对象都包括:监听函数,上次变化的值,获取监听表达式的方法以及监听表达式,最后还包括是否需要使用深度对比(angular.equals())。
遍历一遍所有的watcher函数就是一轮脏检查,执行完一轮之后,只要有watcher监听的值改变过,那么就会重新在进行一轮,直到所有的值都没有变化。从第一轮到所有数据稳定称为一个完整的$digest循环。当循环结束后,才把模型的变化结果更新到dom中去,防止频繁的dom操作。
在digest循环中,AngularJS会遍历整个$watch列表,所有watcher都会被触发,当一个wathcer被触发时,AngularJS会检测Scope模型相应的数据,如果它发生了变化,那么关联到该watcher的回调函数就会被触发。
如果执行了一次digest循环后某个值发生了变化,那么AngularJS会再次循环,直至不再有任何变化。这是因为你在$watch中更新某个值,如果该值对应的$watch已在这遍循环通过,AngularJS将检测不到变化无法更新。如果循环运行了10次或更多次,AngularJS会抛出异常并停止。(就算没有更新值,AngularJS也会多运行一次来确保没有改变,也就是至少运行两次)。
有一张很容易理解的图:
3.学习了$http
$http服务是只能接受一个参数的函数,这个参数是一个对象,包含了用来生成HTTP请求的 配置内容。这个函数返回一个promise对象,具有success和error两个方法。
$http({ method: 'GET', url: '/api/users.json' }).success(function(data,status,headers,config) { // 当相应准备就绪时调用 }).error(function(data,status,headers,config) { // 当响应以错误状态返回时调用 });
1. get() 这个方法是发送GET请求的快捷方式。 get()函数可以接受两个参数。 url(字符串) 一个绝对或相对路径的URL,代表请求的目的地。 config(可选,对象) 这是一个可选的设置对象。 get()方法返回HttpPromise对象。 2. delete() 这是用来发送DELETE请求的快捷方式。 delete()函数可以接受两个参数。 url(字符串) 一个绝对或相对路径的URL,代表请求的目的地。 config(可选,对象) 这是一个可选的设置对象。 delete()方法返回HttpPromise对象。 3. head() 这是用来发送HEAD请求的快捷方式。 head()函数可以接受两个参数。 url(字符串) 一个绝对或相对路径的URL,代表请求的目的地。 config(可选,对象) 这是一个可选的设置对象。 head()方法返回HttpPromise对象。 4. jsonp() 这是用来发送JSONP请求的快捷方式。 jsonp()函数可以接受两个参数。 url(字符串) 一个绝对或相对路径的URL,代表请求的目的地。为了发送JSONP请求,其中必须包含
JSON_CALLBACK字样。例如:
$http .jsonp("/api/users.json?callback=JSON_CALLBACK"); config(可选,对象) 这是一个可选的设置对象。 jsonp()方法返回HttpPromise对象。 5. post() 这是用来发送POST请求的快捷方式。 post()函数可以接受三个参数。 url(字符串) 一个绝对或相对路径的URL,代表请求的目的地。 data(对象或字符串) 这个对象包含请求的数据。 config(可选,对象) 这是一个可选的设置对象。 post()方法返回HttpPromise对象。 6. put() 这是用来发送PUT请求的快捷方式。 put()函数可以接受三个参数。 url(字符串) 一个绝对或相对路径的URL,代表请求的目的地。 data(对象或字符串) 这个对象包含请求的数据。 config(可选,对象) 这是一个可选的设置对象。 put()方法返回HttpPromise对象。
Angular看的有点头疼,很多地方不太理解。
明天计划的事情:
1.开始尝试写任务7;
2.开始准备小课堂的东西。
遇到的问题:
暂无
收获:
如何进行双向数据绑定以及如何使用angular进行服务器的通信。
评论