我正在处理一个迷你联系人列表,我正在尝试实现拖放效果。现在,我有一个控制器,它从数据库中获取数据,如下所示。
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。
现在我有两个指令,一个是拖拽效果,另一个是拖放效果,它们看起来像这样。
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函数,在droppable contactListDrop指令中。
先谢谢你,大牛!
发布于 2013-08-31 20:37:12
我发现了这个问题的解决方法,我不得不使用scope.listdetail(id);而不是美元符号。
发布于 2013-08-31 20:42:30
$scope在指令中不可用。你需要告诉你的指令关于它的父指令。查看Angular文档中关于理解转换和作用域的部分:http://docs.angularjs.org/guide/directive
scope: {
var: '='
}
你也可以在你的指令中scope.$emit一个事件,然后使用$scope.$on在控制器中监听它-我认为这是更好的解决方案,因为你的指令不会被绑定到一个具有特定功能的控制器。
https://stackoverflow.com/questions/18548023
复制相似问题