簡體   English   中英

內角指令控制器功能指令

[英]angular call controller function inside directive

我正在處理迷你聯系人列表,並且正在嘗試實現拖放效果。 現在我有一個控制器,可以從數據庫中獲取數據,看起來像這樣。

Index.controller('cIndex', function($scope, $http) {
    $scope.init = function() {
        $http.get('php/contacts.php').success(function(data) {
            $scope.jsonContactsList = data;
            $scope.jsonContactsDetail = [];
        });
    };
    $scope.init();

    $scope.listdetail = function(index) {
        alert(index);
    };
});

並且此控制器在屏幕上添加聯系人列表。 當我從列表中拖動一個項目並將其放到列表之外時,該項目將從列表中消失並顯示為有關該特定聯系人的詳細div。

現在我有2條指令,1條指令產生拖動效果,1條指令產生下降效果,它們看起來像這樣。

Index.directive('contactListDrag', function() {
    return {
        restrict: 'A',
        link: function(scope, elem, attr) {
            var options = scope.$eval(attr.contactListDrag);
            elem.draggable(options);
        }
    };
});

Index.directive('contactListDrop', function() {
    return {
        restrict: 'A',
        link: function(scope, elem, attr) {
            elem.droppable({accept: '.contact-list-item'});
            elem.bind('drop', function(event, ui) {
                var id = parseInt($(ui.draggable).attr('id'), 10);
                $scope.listdetail(id);
            });
        }
    };
});

現在在控制器內部,我有一個名為listdetail的函數,我打算讓它將jsonContactsList內部的一行更改為jsonContactsDetail,但是為此,我需要從控制器的droppable contactListDrop指令內部調用listdetail函數。

提前謝謝你,丹尼爾!

我找到了解決辦法,我不得不使用scope.listdetail(id); 沒有美元符號。

$ scope在指令中不可用。 您需要告訴指令其父級。 在此處查看有關Angular文檔中的了解透明度和范圍的部分: http : //docs.angularjs.org/guide/directive

scope: {
    var: '='
}

您還可以進行scope。$ emit指令中的事件,並使用$ scope。$ on在控制器中偵聽它。$ on-我認為這是更好的解決方案,因為您的指令不會與具有特定功能的控制器綁定。

暫無
暫無

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

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