如何在Angular-js指令中定义一个函数

Saj*_*ith 13 javascript function angularjs angularjs-directive

我创建了一个使用bootstrap的下拉元素选择用户的指令.如下.

使用Javascript

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

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>
Run Code Online (Sandbox Code Playgroud)

我需要创建一个函数getUserDetails,在从列表中单击用户时应该调用该函数.我的问题是如何在指令本身内定义这个函数?我在控制器中写了它.但问题是我有几个控制器.在所有控制器中编写相同的功能并不是一个好习惯.如果我可以为所有控制器编写通用函数,那就是在指令中,它会很好.如果您有一个很好的解决方案,请告诉我.


修改

我按如下方式修改了我的指令js

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);
            }
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

为此,我在控制台中获得结果{{userList.SessionId}}.不是那个价值.但是当我检查函数传递期望值时. 在此输入图像描述

那么为什么期望值没有进入该函数?


解决了

我通过更改我的指令html tamplate解决了这个问题.我删除',并{{从中如下.

ng-click="getUserDetails(userList.SessionId)"
Run Code Online (Sandbox Code Playgroud)

ica*_*der 23

链接指令功能是一个js函数,您可以在其中执行任何操作

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
            }
        }
     }; 
});
Run Code Online (Sandbox Code Playgroud)

如果您希望此函数不能从指令外部访问,您还应该使用隔离范围来完成.