2017-01-30 63 views
0

执行我使用$ cordovaCalendar插件这个问题。我可以用这$ cordovaCalendar插件成功事件添加到我的智能手机的内建日历,和它的作品对我来说,是的!现在的问题,我想,渲染视图时,要检查这种事件E已被添加到本地日历。

我发现这个代码在网上,并试图实现它。它适用于addEvent,但在getEvents中它并不是因为$ q.all没有执行,而且我需要每个promise的结果才能使视图中的按钮取决于该事件是已添加还是未添加。

下面是代码:

服务:

(function() { 

    'use strict'; 

    angular 
     .module('app.services') 
     .factory('Events', EventsFunction); 

    function EventsFunction($q, $cordovaCalendar) { 
     var incrementDate = function(date, amount) { 
     var tmpDate = new Date(date); 
     tmpDate.setDate(tmpDate.getDate() + amount); 
     tmpDate.setHours(13); 
     tmpDate.setMinutes(0); 
     tmpDate.setSeconds(0); 
     tmpDate.setMilliseconds(0); 

     return tmpDate; 
     }; 

     var incrementHour = function(date, amount) { 
     var tmpDate = new Date(date); 
     tmpDate.setHours(tmpDate.getHours() + amount); 

     return tmpDate; 
     }; 

     var getEvents = function(events) { 

     var deferred = $q.defer(); 
     var promises = []; 

     events.forEach(function(event) { 

      promises.push($cordovaCalendar.findEvent({ 
       title: event.title, 
       startDate: event.start_time 
      })); 
     }); 

     $q.all([promises]).then(function(results) { 

      for (var i = 0; i < results.length; i++) { 

       events[i].status = results[i].length === 1; 
       console.log(events[i]); 
      } 

      deferred.resolve(events); 

     }); 

     return deferred.promise; 
     }; 

     var addEvent = function(event) { 

     console.log(event); 

     var deferred = $q.defer(); 

     $cordovaCalendar.createEvent({ 
      title: event.title, 
      notes: event.ent_name, 
      startDate: event.start_time, 
      endDate: event.start_time 

     }).then(function(result) { 
      console.log('success'); 
      console.dir(result); 
      deferred.resolve(1); 

     }, function(err) { 
      console.log('error'); 
      console.dir(err); 
      deferred.resolve(0); 
     }); 

     return deferred.promise; 

     }; 

     return { 
     get: getEvents, 
     add: addEvent 
     }; 

    } 

})(); 

控制器:

{ 
     $http({ 
      method: 'GET', 
      skipAuthorization: true, //es necesario enviar el token url: '', headers: ... }) 
      .success(function (data) { 


    $scope.posts = data.message; 
      Events.get($scope.posts).then(function(events) { 
       console.log("events", events); 
        $scope.events = events; 
       }); 
       console.log($scope.events); 

      }); 

     $scope.addEventToCalendar = function(event) { 
      //console.log("In event add"); 
      //Events.add(event); 
     } 

     }  

HTML:

<button class="button button-clear button-small button-royal button-block" ng-if="!post.status" ng-click="addEventToCalendar(post)"><b>Add to Calendar</b></button> 
<p ng-if="post.status">This event is added to your calendar already!</p> 

回答

3

我可能是错的,但行$q.all([promises]).then(function(results) { SH应该是$q.all(promises).then(function(results) { - 即promises已经是一个数组了,所以没有必要将它包装在[]中。

+0

我试过这个,它没有成功。我尝试了很多东西,但似乎并没有调用$ q.all(promises)。但即使它被调用,它也不会调用$ .all(...)。 –