2013-08-31 68 views
1

我正在處理迷你聯繫人列表,我試圖實現拖放效果。現在我有一個控制器,可以從數據庫中獲取數據,看起來像這樣。指令內的角度呼叫控制器功能

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內一條線,但爲了做到這一點裏面,我需要從控制器調用listdetail功能,在可拖拽的contactListDrop指令內。

先謝謝你了,丹尼爾!

+0

你有什麼問題? – Chandermani

+0

$ scope.listdetail(id);在第二個指令內部,不會觸發$ scope.listdetail = function(index){alert(index); }; 來自控制器 –

回答

2

我發現了這個問題的解決方法,我不得不使用scope.listdetail(id);沒有美元符號。

0

$ scope在您的指令中不可用。你需要告訴你的指令有關它的父母。旁觀的角度文檔瞭解Transclusion和範圍在這裏的部分:http://docs.angularjs.org/guide/directive

scope: { 
    var: '=' 
} 

你也可以範圍$發出事件從你的指令,並聽它在控制器中使用$範圍。$ on - 我認爲這是更好的解決方案,因爲您的指令不會綁定到具有特定功能的控制器。

+0

不正確,範圍可用,如果它不是隔離範圍。他只是有一個錯字:) – Chandermani