Cómo definir una function dentro de la Directiva Angular-js

Creé una directiva para seleccionar usuarios usando el elemento desplegable de bootstrap. como sigue.

Javascript

app.directive('usersDropdown', function(ConfigService,$http) { return { templateUrl: 'app/views/users_dropdown.html', link: function($scope, element, attrs) { }); }; }); 

users_dropdown.html

 <div class="btn-group pull-right" > <a class="btn dropdown-toggle" data-toggle="dropdown" href=""> Select User <span class="caret"></span> </a> <ul class="dropdown-menu pull-right align-left" role="menu" aria-labelledby="dropdownMenu"> <li ng-repeat = "userList in userLists"><a ng-click="getUserDetails('{{userList.SessionId}}')" style="cursor:pointer">{{userList.UserPartyName}}</a></li> <li ng-hide="userLists" style="cursor:pointer"><a>No Users</a></li> </ul> </div> 

Necesito crear una function getUserDetails , que se debe getUserDetails onclick en un usuario de la list. Mi pregunta es cómo definir esta function dentro de la directiva misma. Lo escribí en el controller. Pero el problema es que tengo varios controlleres. No es una buena práctica escribir la misma function en todos los controlleres. Si puedo escribir la function común para todos los controlleres, eso está dentro de la directiva, será bueno. Si tiene una buena solución, hágamelo saber.


Modificación

Modifiqué el js de mi directiva de la siguiente manera

 app.directive('usersDropdown', function(ConfigService,$http) { return { templateUrl: 'app/views/users_dropdown.html', link: function($scope, element, attrs) { $scope.getUserDetails = function(user_id){ console.log(user_id); } } }; }); 

Para esto estoy obteniendo el resultado en la console como {{userList.SessionId}} . No es el valor para eso. Pero cuando inspeccioné la function está pasando el valor esperado. enter image description here

Entonces, ¿por qué el valor esperado no está dentro de esa function?


Resuelto

Resolví el problema cambiando mis directivas html tamplate. Eliminé ' y {{ de él de la siguiente manera.

 ng-click="getUserDetails(userList.SessionId)" 

La function directiva de enlace es una function js, dentro de la cual puede hacer cualquier cosa

 app.directive('usersDropdown', function(ConfigService,$http) { return { scope : {}, templateUrl: 'app/views/users_dropdown.html', link: function($scope, element, attrs) { $scope.somefunction = function(a) { // Do some stuff } } }; }); 

También debe usar scope aislado para lograr, si desea que esta function no sea accesible desde fuera de la directiva.

Si se encuentra en la necesidad de una function o variable de datos en varios lugares a lo largo de su aplicación, podría ser una buena solución para trasladar parte de su lógica a un service .

Podría, por ejemplo, crear un user service , que debería proporcionar acceso a toda la aplicación a información y methods relacionados con el usuario.