Yes, ng-context-menu is the way to go. Just don't put the dropdown code withing rowTemplate as the position would be incorrect. Place it outside of ui-grid. The only issue with this approach is to get the current ui-grid row. I decided to save it to controller scope on context menu opening. My rowTemplate:
<script type="text/ng-template" id="member-list.row.html">
<div ng-click="col.isRowHeader || grid.appScope.selectNode(row.entity)" ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.uid" ui-grid-one-bind-id-grid="rowRenderIndex + '-' + col.uid + '-cell'" class="ui-grid-cell" ng-class="{'ui-grid-row-header-cell': col.isRowHeader, '__selected': row.entity.id===grid.appScope.selectedNodeId }" role="{{col.isRowHeader ? 'rowheader' : 'gridcell' }}" ui-grid-cell style='cursor:pointer' context-menu="grid.appScope.contextMenuEntity = row.entity" data-target="cml_menu"></div>
</script>
Note the context-menu="grid.appScope.contextMenuEntity = row.entity" data-target="cml_menu" part in it. That way I can use contextMenuEntity later wherever needed. Using it in context menu dropdown:
<ul class="menu __context" role="menu" id="cml_menu">
<li class="menu-item" ng-click='blade.showDetailBlade(contextMenuEntity, contextMenuEntity.displayName)'>
<i class="menu-ico fa fa-edit"></i> Manage
</li>
<li class="menu-item" ng-click='delete(contextMenuEntity)'>
<i class="menu-ico fa fa-trash-o"></i> Delete
</li>
</ul>