2015-05-12 3 views
5

Моя задача - обработать отброшенный текст с помощью углового. Я продолжаю получать эту ошибку $scope is not defined о событиях перетаскивания. Любая идея, как это исправить?

Я уже изучал угловые библиотеки перетаскивания. Они не позволяют перетаскивать для простого текста. Большинство из них работают со списками. Дайте мне знать, если есть один, который работает для выполнения этой задачи

Вот plunker:

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

здесь контроллер:

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

В вашем HTML вы используете '$ scope.drag'. Вам не нужна '$ scope'. Просто используйте 'drag ($ event)'. – ajkavanagh

+0

Теперь он говорит: «Неотдача ReferenceError: перетаскивание не определено, allowDrop не определено». – kumaro

+1

Извините, я был глуп. Вы не можете делать то, что делаете в Angular, как вы это делаете. т. е. вы не можете поместить функции $ scope в обычные атрибуты. Вы должны использовать версии 'ng- '. И нет никаких событий перетаскивания. Вам нужно использовать что-то вроде [ngDraggable] (http://ngmodules.org/modules/ngDraggable) – ajkavanagh

ответ

6

$scope объект будет не доступен в «Наружный угловой контекст». Всякий раз, когда вы хотите получить доступ к угловому пространству в JavaScript (внешний угловой мир), вам нужно получить scope, получив DOM этого элемента &, затем получите доступ к его объему, как angular.element(document.getElementById('testApp')), который является ничем иным, как областью тела.

Working Plunkr

см это SO answers, чтобы получить доступ к области действия за пределами углового контекста.

+0

Спасибо, что ответили на мой вопрос – kumaro

+0

@kumaro рад помочь вам .. это было бы более элегантно, если вы сделаете это, используя директиву .. –

1

короче один на основе @ Панкай-Parkar Ответ:

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