AngularJs forEach逻辑,不是那么学术但工作

时间:2017-06-12 06:25:49

标签: angularjs foreach angular-promise

我已经有了这个代码,但我不认为这是正确的方法。我想我需要使用$ 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来填充吗?我不确定......这是有效的,但这是避免性能问题的正确方法吗?

度过愉快的一天

1 个答案:

答案 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. 
)