2015-10-06 84 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({})...我想。感谢您的回复。我将其更改为获取请求,并在本地托管我的数据以进行测试 - 现在没有问题。