Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度调用控制器函数内部指令_Javascript_Jquery_Angularjs - Fatal编程技术网

Javascript 角度调用控制器函数内部指令

Javascript 角度调用控制器函数内部指令,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我正在制作一个迷你联系人列表,并尝试实现拖放效果。现在我有一个控制器,它从数据库中获取数据,看起来像这样 Index.controller('cIndex', function($scope, $http) { $scope.init = function() { $http.get('php/contacts.php').success(function(data) { $scope.jsonContactsList = data;

我正在制作一个迷你联系人列表,并尝试实现拖放效果。现在我有一个控制器,它从数据库中获取数据,看起来像这样

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);
    };
});
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);
            });
        }
    };
});
该控制器在屏幕上添加联系人列表。我想这样做,当我从列表中拖动一个项目并将其放到列表外时,该项目将从列表中消失,并显示为有关该特定联系人的详细div

现在我有两个指令,一个是拖拽效果,一个是拖拽效果,它们看起来像这样

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);
    };
});
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,但为了实现这一点,我需要从控制器调用listdetail函数,在Dropable contactListDrop指令中


先谢谢你,丹尼尔

我发现了这个问题的解决方法,我不得不使用scope.listdail(id);没有美元符号。

$scope在您的指令中不可用。你需要告诉你的指令关于它的父项。请看以下文档中关于理解转换和范围的部分:


您也可以scope.$emit从指令中发出事件,并使用$scope在控制器中侦听它。$on-我认为这是更好的解决方案,因为您的指令不会绑定到具有特定功能的控制器。

您遇到了什么问题?$scope.listdetail(id);在第二个指令中,不触发$scope.listdail=函数(index){alert(index);};从controllerNot correct,如果范围不是隔离范围,则范围可用。他只是打错了一个字:)