我正在製作有大量數據的表格(使用ag-grid - http://www.ag-grid.com/,但它並不重要)。從外部角碼調用角度服務
在該表中,我想觸發角度服務來打開模態(具有詳細信息)。 問題是我不想使用角度指令(我有超過10000條記錄)只能使用類似<a on-click="angular.service('modal').method('open-modal').params({id:1})">Open modal</a>
是否有可能?
我正在製作有大量數據的表格(使用ag-grid - http://www.ag-grid.com/,但它並不重要)。從外部角碼調用角度服務
在該表中,我想觸發角度服務來打開模態(具有詳細信息)。 問題是我不想使用角度指令(我有超過10000條記錄)只能使用類似<a on-click="angular.service('modal').method('open-modal').params({id:1})">Open modal</a>
是否有可能?
在外面調用角度相關的東西是一種相當糟糕的做法(它也可能影響摘要/應用循環,並且不能按預期工作)。也許有另一種方法:
如果你在一個控制器內部,你可以將你的服務保存在一個範圍變量中,然後使用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)。記住,這是仍然不好的做法,應該儘量避免
你可以寫你自己的服務並將其註冊爲一個工廠,比在你的控制器注入,並觸發時,從您的控制器調用服務方法納克單擊
是這裏面的控制器? (也就是在頂層具有ng-controller屬性的html中) – valepu
是 - 整個代碼位於角度元素(指令) – piernik