2017-01-30 5 views
0

$ cordovaCalendarプラグインを使用してこの問題が発生しました。この$ cordovaCalendarプラグインを使用して、スマートフォンのネイティブカレンダーにイベントを追加することができます。この問題は今、ビューをレンダリングするときに、そのようなイベントEがネイティブ・カレンダーに追加されているかどうかをチェックしたいと考えています。

このコードはオンラインであり、実装しようとしました。それはaddEventで動作しますが、$ q.allは実行されていないため、getEventsでは実行されません。イベントが既に追加されているか、追加されていないかによって、ビューのボタンを依存させるために各約束の結果が必要です。

サービス:

(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(約束)はまったく呼び出されていないようです。しかし、呼び出されても$ .all(...)を呼び出すことはありません。 –

関連する問題