从外部角度代码调用角度服务

时间:2015-11-02 11:43:17

标签: angularjs

我正在制作包含大量数据的表格(使用ag-grid - http://www.ag-grid.com/,但这并不重要。)

在该表中,我想触发角度服务以打开模态(带有详细信息)。 问题是我不想使用angular的指令(我有超过10000条记录)只使用像<a on-click="angular.service('modal').method('open-modal').params({id:1})">Open modal</a>这样的东西

有可能吗?

2 个答案:

答案 0 :(得分:2)

在外面调用与角度相关的东西是一种非常糟糕的做法(它也可能影响摘要/应用循环而不能按预期工作)。也许还有另一种选择:

如果您在控制器内,可以将服务保存在范围变量中,然后使用ng-click调用服务中的功能。

IMPORTXML

然后,在HTML中:

var Controller=function($scope, YourService) {
    $scope.myService=YourService;
};
Controller.$inject=['$scope', 'YourService'];

app.controller('Controller', Controller);

如果您仍然需要在其外部使用与角度相关的方法,那么您应该能够调用&#34; scope()&#34;以这种方式运作:

<a ng-click="myService.method('open-modal').params({id:1})">Open modal</a>

您仍需要将服务分配给范围变量,以便能够以这种方式访问​​它。 <a on-click="angular.element('#idOfTagWithNgController').scope().myService.method('open-modal').params({id:1})">Open modal</a> 当然是带有idOfTagWithNgController属性的HTML标记的ID(如果没有ID,则可以添加它)。请注意,这仍然是不好的做法,应该避免

答案 1 :(得分:1)

您可以编写自己的服务并将其注册为工厂,而不是将其注入控制器并在触发ng-click时从控制器调用服务方法