2014-09-01 106 views
1

我有一個angularJS工廠和控制器的問題 我想在工廠得到http回覆並使用控制器中的api回覆 但我不知道如何處理工廠並將其注入控制器注入控制器的工廠angularJS

.controller('PlaylistsCtrl', function ($scope, $http) { 
$http({ method: 'GET', url: "https://www.googleapis.com/blogger/v3/blogs/1309320265504420965/posts?key=***************" }). 
    success(function (data, status, headers, config) { 
     // this callback will be called asynchronously 
     // when the response is available 
     for (var i =0; i < data.items.length;i++) 
     { 

     var m, 
     urls = [], 
     str = data.items[i].content, 
     rex = /(https?:\/\/.*\.(?:png|jpg))/g; 

     while (m = rex.exec(str)) { 
      urls.push(m[1]); 
      data.items[i].ImageURL = urls[0]; 
      } 
      //data.items[i].ImageURL = urls[0]; 
     } 
     $scope.playlists = data.items; 
    }). 
    error(function (data, status, headers, config) { 
     // called asynchronously if an error occurs 
     // or \\server returns response with an error status. 
    }); 
}) 

回答

2

我不完全確定你在找什麼,但你總是可以通過返回http調用來返回一個承諾。然後搶控制器的承諾,用它做什麼:

例如: apiService.js

(function(app) { 
    "use strict"; 

    app.factory("apiService", ["$http", function($http) { 
     var get = function(url, config) { 
      return $http.get(url, config); 
     }; 

     var post = function(url, data, config) { 
      return $http.post(url, data, config); 
     }; 

     var put = function(url, data, config) { 
      return $http.put(url, data, config); 
     }; 

     var remove = function(url, config) { 
      return $http.delete(url, config); 
     }; 

     return { 
      get: get, 
      post: post, 
      put: put, 
      remove: remove 
     }; 
    }]); 
})(_app); 

,並在控制器剛剛注入服務:

(function(app) { 
    "use strict"; 

    app.controller("MyCtrl", ["$scope", "apiService", function($scope, apiService) { 

      $scope.getData = function() { 
       apiService.get("/server/data").success(function(data) { 
        console.log(data); 
       }).error(function(err) { 
        console.log(err); 
       }); 
      }; 
     } 
    ]); 
})(_app); 

可選(應用程序。 js):

var _app = _app || {}; 

(function() { 

    "use strict"; 

    _app = angular.module("myApp", []); 
})(); 
+0

首先非常感謝你的快速回復 做什麼你的意思是 $ scope.getData = function(){ apiService.get(「/ server/data」)。success(function(data) – 2014-09-01 20:50:19

+0

這只是演示如何爲所有外部API創建通用服務打電話的。 getData只是一個示例函數,展示瞭如何使用apiService返回的承諾。 – 2014-09-02 06:10:16