簡體   English   中英

如何在Angular-js指令中定義一個函數

[英]How to define a function inside Angular-js Directive

我創建了一個使用bootstrap的下拉元素選擇用戶的指令。 如下。

使用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>

我需要創建一個函數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);
            }
        }
    };
});

為此,我在控制台中以{{userList.SessionId}}獲得結果。 不是那個價值。 但是當我檢查函數傳遞期望值時。 在此輸入圖像描述

那么為什么期望值沒有進入該函數?


解決了

我通過更改我的指令html tamplate解決了這個問題。 我刪除了'{{來自如下。

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

鏈接指令功能是一個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
            }
        }
     }; 
});

如果您希望此函數不能從指令外部訪問,您還應該使用隔離范圍來完成。

如果您發現自己需要在應用程序的各個位置使用函數或數據變量,那么將某些邏輯移動到服務中可能是一個很好的解決方案。

例如,您可以創建一個user service ,該user service應該提供對用戶相關信息和方法的應用程序范圍的訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM