2017-01-30 82 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(...)。 –