2016-07-13 28 views
0

コントローラを使用して$httpリクエストを行うサービスを呼び出すのですが、今は自分のサービスを設定して文字列を返すようにしました。それが正常に機能していることを確認してください。Angularjsコントローラ呼び出しサービス - 関数でない場合は.success

私はそれを実行すると、私は次のエラーを取得:以下

TypeError: monitorData.requestEvent(...).success is not a function 

マイコード:

コントローラ

(function() { 

    angular 
     .module('monitorApp') 
     .controller('eventCtrl', eventCtrl); 

    eventCtrl.$inject = ['$scope', '$routeParams', 'monitorData']; 
    function eventCtrl($scope, $routeParams, monitorData) { 
     var vm = this; 
     vm.eventid = $routeParams.eventid; 
     vm.event = {}; 

     vm.getData = function(eventid) { 
      console.log("getData variable accessed"); 
      monitorData.requestEvent(eventid) 
       .success(function(data) { 
        console.log(data); 
       }) 
       .error(function(e) { 
        console.log("Error"); 
       }); 
      return false; 
     }; 

     vm.getData(vm.eventid); 

    } 

})(); 

サービス

(function() { 

    angular 
     .module('monitorApp') 
     .service('monitorData', monitorData); 

    monitorData.$inject = ['$http']; 
    function monitorData($http) { 
     var requestEvent = function(eventid) { 
      var gas = "Event " + eventid + " requested.." 
      console.log(gas); 
      return gas; 
     }; 

     return { 
      requestEvent : requestEvent, 
     }; 
    } 

})(); 
0123を
+0

'$ q'を使い、' defer.resolve'を使って動作させる必要があります。 – batmaniac7

+0

'$ q'を注入して、ガスの代わりに' $ q.when(gas) 'を返してください。 – DerekMT12

+0

成功/エラーの代わりに/ catchを使うべきです。成功/エラーハンドラは廃止予定です。 – DerekMT12

答えて

1

と連鎖しdeferresolvesuccess

と返す約束を使用する必要があり、それを動作させるために、それが落ち着いた約束を返す必要があります。

monitorData.$inject = ['$http', '$q']; 
function monitorData($http, $q) { 
    var requestEvent = function(eventid) { 
     var gas = "Event " + eventid + " requested.." 
     console.log(gas); 
     return $q.resolve(gas); 
    }; 

    return { 
     requestEvent : requestEvent, 
    }; 
} 

ところで

successerrorは、従来の方法を推奨されません。現在は常に thencatchです。

+0

だから私は単純に '.success'を '.then'と '.error'と '.catch'で置き換えますか? – Kenny

+0

これは正しいです。 'success'と' error'は互換性のためにそこにあります。 2つのコールバック引数を持つ単一の 'then'でもかまいません。 '' .then(...、...) 'と' .then(...)。catch(...) 'の間にはいくつかの違いがあります。 'catch'は' $ http'の結果と 'then'の両方からエラーを捕捉します。 – estus

+0

素晴らしいですが、これはうまく機能しません。また、廃止された成功/エラーに関する洞察にも感謝しています。 – Kenny

1

successerrorは約束の一部であり、約束を返せません。

は後で連鎖させるためには.success.error

monitorData.$inject = ['$http','$q']; 

var defer = $q.defer(); 
function monitorData($http) { 
     var requestEvent = function(eventid) { 
      var gas = "Event " + eventid + " requested.." 

      defer.resolve(gas) 
      return defer.promise; 
     }; 

     return { 
      requestEvent : requestEvent, 
     }; 
    } 
+0

コントローラのコードは、と同じままになります。成功と失敗? – Kenny

+0

はい。変更はありません –

+0

'$ q.when(ガス)'を返すほうがずっと簡単です。 – DerekMT12

関連する問題