[英]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.