我已经有了这个代码,但我不认为这是正确的方法。我想我需要使用$ q,但我很难理解。
我从我的php服务器-mysql后端正确地从我的angularJs工厂收到了这个很好的json(data.data)数组。这是一些有开始日期的rendez-vous:
[{"id":"1","title":"Loi Travail","infos":null,
"adresse":"12 avenue des lis 78013 paris",
"criticite":"4","fichiers":null,
"start":"2017-06-11T22:37:59.012Z"},
{"id":"17","title":"jjtyjyjt","infos":"jytjjyjyj",
"adresse":"tjtyjjyj","criticite":"7","fichiers":"",
"start":"2017-06-11T22:37:59.012Z"}]
问题是angular-material-datetimepicker无法识别开始日期,因为它是一个字符串,所以我需要做一个循环来添加新的Date(),以转换我的每个“start”元素。
所以,我已经完成了这个简短的代码,正在运行:
rdvFactory.get_rdvs().then(function(data){
$scope.events = data.data;
angular.forEach($scope.events,function(value,index){
value.start = new Date(value.start);
})
})
它正在工作,这意味着我可以看到在angular-material-datetimepicker中出现的所有rendez vous,但我不认为这是正确的方法,因为我正在改变几次范围(2方式绑定)angular.forEach的每次迭代,我认为它非常消耗。
我想我应该在data.data上做一个转换日期的foreach,在它完成之后,我应该在那之后设置$ scope.events。
我不知道你是否明白我的意思,但很难用$ q工作,如果有人能解释一下$ qa,我会很感激,因为即使是在stackoverflow上给出的例子,也很难理解语法。
问题:您认为添加第二个更好吗。那么这样吗?
rdvFactory.get_rdvs().then(function(data){
$scope.events = data.data;
}).then(function(data){
angular.forEach($scope.events,function(value,index){
value.start = new Date(value.start);
})
});
在最后一个例子中,你认为第二个。然后真的等待$ scope.events来填充吗?我不确定......这是有效的,但这是避免性能问题的正确方法吗?
度过愉快的一天
答案 0 :(得分:1)
尼克 - 你是对的,更改$ scope变量是昂贵的,会产生不必要的摘要周期。我建议你这样做 -
rdvFactory.get_rdvs().then(function(data){
var tempData = data.data; // A temp local variable
angular.forEach(tempData ,function(value,index){
value.start = new Date(value.start);
}
$scope.events = tempData; // assign the final JSON to scope variable.
})
关于$ q,它主要用于组合两个或多个AJAX响应,然后执行操作。例如 -
如果有AJAX调用来获取用户详细信息(基于ID)&另一个获取用户访问权限的呼叫(基于ID),然后我们可能希望将它们一起激活,因为两者都需要成功登录。
流量错误 -
Fetch User details.on success then(
//fetch user access right // on success of user details call fire user access rights.
)
相反,您将数组中的两个调用都排队,并等待它们一起通过或失败。
$q = [call1, call2]
$q.then (
//on success, we know that user is correct and has right user access.
)