2015-10-06 125 views
1

我有一個名爲depotSvc的工廠服務。我將它添加到控制器的範圍中。當我直接從控制器訪問它時,沒有任何問題 - 它將「foo」記錄到控制檯。當我通過ng-click函數調用它時,它不會將「foo」記錄到控制檯。在ng-click函數中調用服務有沒有竅門?通過ng-click函數調用服務

HTML

<button id="a" type="button" ng-click="getAreaData(depotCode, a)"> 

JS

$scope.depotSvc = depotSvc; 

$scope.getAreaData = function(depotCode, depotArea) { 

    $state.go("depot", {depotCode : depotCode, depotArea : depotArea }); 

    depotSvc.getDepotVehiclesFlatArray(depotCode, depotArea).then(function(data){ 
        console.log("foo") 
       }) 
      }; 

回答

4

有沒有竅門,從NG-點擊函數中調用服務?

沒有技巧,你可以訪問你暴露給範圍(或控制器實例,如果controllerAs語法的情況下)的一切。所以如果你需要你的服務在Angular表達式中以HTML格式提供,你需要將它分配給某個範圍屬性。例如:

$scope.depotSvc = depotSvc; 
+0

這似乎是我的服務後續問題。感謝您的幫助。 – user1824797

+0

請注意,從模板調用異步方法可能沒有那麼有用(因爲您無法定義回調函數)。例如在你的情況下,'ng-click =「depotSvc.getDepotVehiclesFlatArray(depotCode,depotArea)'不是很有用。同步方法很好。 – dfsq

0

問題出在我的服務。我有一個jsonp請求調用測試數據,我有一個虛擬包裝 - 總是由angular_0({})包裝。 JSONp會失敗,大概b/c它期望有不同的包裝,即angular_1({})...我想。感謝您的回覆。我將其更改爲獲取請求,並在本地託管我的數據以進行測試 - 現在沒有問題。