发表于: 2017-06-07 22:27:18
1 1184
今天完成的事情:
任务8搜索模块的代码编写。因为在写自定义翻页指令的时候封装了请求函数,写起来还是挺快的。
封装的请求函数代码:
var reGetProducts = function() {
$http({
method: "GET",
url: "/carrots-admin-ajax/a/article/search",
params: {
page: $scope.paginationConf.currentPage,
size: $scope.paginationConf.itemsPerPage,
stratAt: startTimeStamp,
endAt: endTimeStamp,
type: $scope.genre.type,
status: $scope.estate.status
}
})
.then(function (response) {
console.log(response);
$scope.records = response.data.data.articleList;
$scope.paginationConf.totalItems = response.data.data.total;
});
};
写法可能不太简洁,打算先完成功能,等任务10完成后,再来优化代码和样式。
搜索部分代码:
//下拉列表选项
$scope.genreName = [
{type: "", name:"全部"},
{type: 0, name: "首页Banner"},
{type: 1, name: "找职位Banner"},
{type: 2, name: "找精英Banner"},
{type: 3, name: "行业大图"}
];
$scope.estateName = [
{status: "", name: "全部"},
{status: 1, name: "草稿"},
{status: 2, name: "上线"}
];
//按钮点击事件
var startTimeStamp;
var endTimeStamp;
$scope.search = function() {
//获取时间
$scope.startTime? startTimeStamp = Date.parse($scope.startTime) : startTimeStamp = "";
$scope.endTime? endTimeStamp = Date.parse($scope.endTime) : endTimeStamp = "";
reGetProducts();
console.log(startTimeStamp, endTimeStamp);
};
$scope.empty = function() {
$scope.startTime = "";
$scope.endTime = "";
$scope.genre = $scope.genreName[0];
$scope.estate = $scope.estateName[0];
console.log($scope.genre, $scope.estate);
reGetProducts();
};
因为一开始用的原生的input=date,比较丑,明天打算换成ui-bootstrap插件。
逛博客的时候看倒一篇写angular的$http请求的文章,写的很详细,学习了一波:
1、链式调用
$http服务是只能接受一个参数的函数,这个参数是一个对象,包含了用来生成HTTP请求的配置内容。这个函数返回一个promise对象,具有success和error两个方法。
$http({
url:'data.json',
method:'GET'
}).success(function(data,header,config,status){
//响应成功
}).error(function(data,header,config,status){
//处理响应失败
});
2、返回一个promise对象
var promise=$http({
method:'GET',
url:"data.json"
});
由于$http方法返回一个promise对象,我们可以在响应返回时用then方法来处理回调。如果使用then方法,会得到一个特殊的参数,它代表了相应对象的成功或失败信息,还可以接受两个可选的函数作为参数。或者可以使用success和error回调代替。
promise.then(function(resp){
//resp是一个响应对象
},function(resp){
//带有错误信息的resp
});
或者这样:
promise.success(function(data,status,config,headers){
//处理成功的响应
});
promise.error(function(data,status,hedaers,config){
//处理失败后的响应
});
then()方法与其他两种方法的主要区别是,它会接收到完整的响应对象,而success()和error()则会对响应对象进行析构。
3、快捷的get请求:
①$http.get('/api/users.json');
get()方法返回HttpPromise对象。
还可以发送比如:delete/head/jsonp/post/put 函数内可接受参数具体参照148页
②以再发送jsonp请求举例说明: 为了发送JSONP请求,其中url必须包含JSON_CALLBACK字样。
jsonp(url,config) 其中config是可选的
var promise=$http.jsonp("/api/users.json?callback=JSON_CALLBACK");
4、也可以将$http当做函数来使用,这时需要传入一个设置对象,用来说明如何构造XHR对象。
$http({
method:'GET',
url:'/api/users.json',
params:{
'username':'tan'
});
其中设置对象可以包含以下主要的键:
①method
可以是:GET/DELETE/HEAD/JSONP/POST/PUT
②url:绝对的或者相对的请求目标
③params(字符串map或者对象)
这个键的值是一个字符串map或对象,会被转换成查询字符串追加在URL后面。如果值不是字符串,会被JSON序列化。
//参数会转为?name=ari的形式
$http({
params:{'name':'ari'}
});
④data(字符串或者对象)
这个对象中包含了将会被当作消息体发送给服务器的数据。通常在发送POST请求时使用。
从AngularJS 1.3开始,它还可以在POST请求里发送二进制数据。要发送一个blob对象,你可以简单地通过使用data参数来传递它。
5、响应对象(我封装的请求函数就是根据这个写的)
AngularJS传递给then()方法的响应对象包含了四个属性。
data
这个数据代表转换过后的响应体(如果定义了转换的话)
status
响应的HTTP状态码
headers
这个函数是头信息的getter函数,可以接受一个参数,用来获取对应名字值
$http({
method: 'GET',
url: '/api/users.json'
}).then (resp) {
// 读取X-Auth-ID
resp.headers('X-Auth-ID');
});
config
这个对象是用来生成原始请求的完整设置对象。
statusText(字符串)
这个字符串是响应的HTTP状态文本。
明天计划的事情:
1.开始学习任务9的相关知识;
2.把任务8的一些工作收尾,比如article的上下线、删除等等
遇到的问题:
一开始使用一个控制器,结果导致input的ng-model取不到值,后来王蒙师兄看了后,判断应该是控制器的问题,但是在ui-route里加入控制器后会请求两次,后来我把页面拆开写,加了一个新的控制器,就解决了问题。
收获:
控制器规范的写法以及代码封装的好处。
评论