2015-05-12 15 views
5

Il mio compito è quello di elaborare il testo abbandonato utilizzando angolare. Continuo a ricevere questo errore $scope is not defined durante il trascinamento degli eventi. Qualche idea su come risolvere questo problema?

Ho già esaminato le librerie di trascinamento e rilascio angolare. Non consentono il trascinamento per testo semplice. Molti di loro lavorano con elenchi. Fatemi sapere se c'è uno che lavora per questo compito

Ecco l'plunker:

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

qui è il controller:

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

nel codice HTML si utilizza '$ scope.drag'. Non hai bisogno di '$ scope '. Basta usare 'drag ($ event)'. – ajkavanagh

+0

Ora dice "Uncaught ReferenceError: drag non è definito, allowDrop non è definito". – kumaro

+1

Scusa, ero stupido. Non puoi fare ciò che stavi facendo in Angular nel modo in cui lo stai facendo. Ad esempio, non è possibile inserire le funzioni $ scope negli attributi normali. Devi usare le versioni 'ng- '. E non ci sono eventi drag-drop. Hai bisogno di usare qualcosa come [ngDraggable] (http://ngmodules.org/modules/ngDraggable) – ajkavanagh

risposta

6

$scope oggetto sarà non disponibile in "Contesto angolare esterno". Ogni volta che vuoi accedere allo scope angolare in JavaScript (Outside angular world) devi ottenere il scope ottenendo il DOM di quell'elemento & quindi accedere allo scope di esso come angular.element(document.getElementById('testApp')) che non è altro che l'ambito del corpo.

Working Plunkr

segnalare questo SO answers per ottenere l'accesso alla portata fuori contesto angolare.

+0

Grazie per aver risposto alla mia domanda – kumaro

+0

@kumaro felice di aiutarti..it sarebbe più elegante se lo fai usando la direttiva .. –

1

uno più corto sulla base di @ pankaj-Parkar risposta:

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