2015-05-12 23 views
5

Moim zadaniem jest przetwarzanie upuszczonego tekstu za pomocą kąta. Ciągle otrzymuję ten błąd $scope is not defined w przypadku zdarzeń przeciągania i upuszczania. Jakiś pomysł jak to naprawić?

Już zajrzałem do kanciastych bibliotek przeciągania i upuszczania. Nie pozwalają na przeciąganie i upuszczanie dla prostego tekstu. Większość z nich pracuje z listami. Daj mi znać, jeśli istnieje taki, który pracuje dla tego zadania

Oto plunker:

[http://plnkr.co/edit/egKL13hsHka6RiX4UfSS?p=preview] [1]

tutaj jest kontrolerem: czy

var app = angular.module("test", []); 
app.controller('testCtrl', ['$scope',function ($scope) { 
    $scope.nouns = ['guitar']; 
    $scope.verbs = ['play']; 
    $scope.allowDrop= function (ev) { 
     ev.preventDefault(); 
    }; 
    $scope.drag= function (ev) { 
     ev.dataTransfer.setData("Text", ev.target.id); 
    };  
    $scope.drop= function (ev) { 
     ev.preventDefault(); 
     var data = ev.dataTransfer.getData("Text"); 
     if(ev.target.id =='verb' && $scope.verbs.indexOf(data) != -1){ 
      ev.target.appendChild(document.getElementById(data)); 
     } 
     else{ 
      alert(data + ' is not a ' + ev.target.id +'. Try again'); 
     }    
    };  
    }]); 
+0

w HTML używasz '$ scope.drag'. Nie potrzebujesz '$ scope'. Po prostu użyj 'przeciągnij ($ event)'. – ajkavanagh

+0

Teraz pojawia się komunikat "Uncaught ReferenceError: przeciąganie nie jest zdefiniowane, allowDrop nie jest zdefiniowane". – kumaro

+1

Przepraszam, byłem głupi. Nie możesz robić tego, co robiłeś w Angular, tak jak to robisz. tj. nie można umieszczać funkcji $ scope w zwykłych atrybutach. Musisz użyć wersji 'ng- '. I nie ma żadnych dla zdarzeń przeciągania i upuszczania. Musisz użyć czegoś takiego jak [ngDraggable] (http://ngmodules.org/modules/ngDraggable) – ajkavanagh

Odpowiedz

6

$scope przedmiot niedostępne w "Zewnętrzny kontekst kątowy". Zawsze, gdy chcesz uzyskać dostęp do zakresu kątowego w JavaScript (poza zakrzywionym świecie), musisz uzyskać scope z uzyskania DOM tego elementu &, a następnie uzyskać dostęp do jego zakresu, tak jak angular.element(document.getElementById('testApp')), który jest jedynie zasięgiem ciała.

Working Plunkr

Patrz ten SO answers aby uzyskać dostęp do zakresu poza kątowej kontekście.

+0

Dzięki za odpowiedź na moje pytanie – kumaro

+0

@kumaro cieszę się, że mogę Ci pomóc .. byłoby bardziej elegancko, jeśli zrobisz to za pomocą dyrektywy .. –

1

jeden krótszy podstawie @ pankaj-Parkar odpowiedź:

<div draggable="true" ondrag="angular.element(this).scope().on_drag(event)"></div>