2014-10-07 43 views
0

我的目標是能夠從兩個控制器交換數據,我被告知我可以創建一個服務,然後將數據注入到其他控制器 - 但我無法將此('somethingDetailCtrl')控制器轉換爲服務/工廠..需要將控制器轉換爲工廠?

somethingApp.controller('somethingDetailCtrl', ['$scope', '$routeParams', '$http', 
    function($scope, $routeParams, $http) { 
     $http.get('/assets/javascripts/something/something/' + $routeParams._id +'.json').success(function(data) { 
     $scope.thething = data; 
    }); 
}]); 

會有人好心地走我通過這個(只是轉換somethingDetailCtrl到工廠),我有大約2天的角的知識,所以任何的解釋是值得歡迎的。

+0

對不起,但你的問題不是很清楚。你能分享/解釋你想在你的控制器之間共享的數據的更多信息嗎? – apairet 2014-10-07 18:58:45

+0

好吧我的問題中的工廠是我製作的工廠列表,這是我寫的唯一工廠。上面的控制器還需要將其內部轉換爲工廠 - 我遇到了一個「somethingsetailctrl」問題 - 我需要幫助爲此控制器構建工廠。對不清楚的問題抱歉。 – Iamsamstimpson 2014-10-07 21:23:30

回答

1

一個angularjs工廠使用一個函數構造一個新的服務,該函數返回一個包含服務公開的所有數據和行爲的對象。該工廠是一個單身人士。你的榜樣控制器正在暴露的HTTP GET和可以寫成這樣,如果我們不關心錯誤檢查:

angular.module('something',[]).factory('Something', function($http) { 
    return { 
     getSomething: function(callback) { 
      $http.get('/something').success(function(data, status) { 
       callback(data, status); 
      }) 
     } 
    } 
} 

工廠函數的參數是它的依賴。在上面的例子中,我們只使用$ http。我們可以通過添加$ Q使用的承諾......我們再次跳過錯誤在這個例子中檢查:

angular.module('something',[]).factory('Something', function($http, $q) { 
    return { 
     getSomething: function() { 
      var deferred = $q.defer(); 
      $http.get('/something').success(function(data, status) { 
       deferred.resolve(data); 
      }); 
      return deferred.promise; 
     } 
    } 
} 

可以消耗任何上述的從您的控制器。要使用第一工廠例子,你可以做以下其中的第二個參數控制器的功能是由工廠產生的服務:

angular.module('somethingApp').controller('somethingDetailCtrl', function ($scope, Something) { 
    Something.getSomething(function(data) { 
     $scope.thething = data; 
    }); 
} 

希望這有助於。

0

據我所見,這家工廠寫得很好。現在你只需要將它注入你的控制器。例如,延長上述控制器,你會改變它是這樣的:

somethingApp.controller('somethingDetailCtrl', ['$scope', '$routeParams', 'somethingListFactory', 
    function($scope, $routeParams, somethingListFactory) { 
     somethingListFactory.list().then(function(data){ 
      $scope.thething = data; 
     }); 
    }); 
}]); 

編輯:我認錯,刪除以下部分從您的工廠(這是徒勞的):

.then(
    function(result) { 
      return result.data; 
    }); 
+0

我認爲工廠和控制器都應該具有'$ promise'功能。順便說一句,offtopic,我也是波斯尼亞語(比哈奇),並希望連接,也許我們可以在一些項目上合作。 – developer10 2014-10-07 20:29:38

+0

好吧,如果你想在這兩個函數中有回調,請參閱我的答案在這裏http://stackoverflow.com/questions/26242446/angular-pass-deferred-error-from-service-to-controller/26242566#26242566 PS我該如何與你聯繫? :) – hakazvaka 2014-10-08 05:18:00

+0

給我發電子郵件:deno.kajda' - @ - 'gm-com – developer10 2014-10-08 10:01:02