2015-11-02 94 views
1

我正在製作有大量數據的表格(使用ag-grid - http://www.ag-grid.com/,但它並不重要)。從外部角碼調用角度服務

在該表中,我想觸發角度服務來打開模態(具有詳細信息)。 問題是我不想使用角度指令(我有超過10000條記錄)只能使用類似<a on-click="angular.service('modal').method('open-modal').params({id:1})">Open modal</a>

是否有可能?

+0

是這裏面的控制器? (也就是在頂層具有ng-controller屬性的html中) – valepu

+0

是 - 整個代碼位於角度元素(指令) – piernik

回答

2

在外面調用角度相關的東西是一種相當糟糕的做法(它也可能影響摘要/應用循環,並且不能按預期工作)。也許有另一種方法:

如果你在一個控制器內部,你可以將你的服務保存在一個範圍變量中,然後使用ng-click來調用你的服務中的一個函數。

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

app.controller('Controller', Controller); 

然後,在HTML:

<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當然是帶有ng-controller屬性的HTML標記的ID(如果它沒有可以添加它的id)。記住,這是仍然不好的做法,應該儘量避免

+0

我可以在該元素中使用指令,因爲ag-grid有很好的選擇來編輯具有角度'angularCompileRows',但我有嚴重的性能問題,即使沒有觀察者 – piernik

+0

所以這個問題沒有作出新的指令,但由於angularCompileRows影響性能,所以不能使用任何甚至是角度的默認指令。 – valepu

+0

我已編輯我的答案,看看這個作品 – valepu

1

你可以寫你自己的服務並將其註冊爲一個工廠,比在你的控制器注入,並觸發時,從您的控制器調用服務方法納克單擊