2015-05-12 21 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'。你不需要'$範圍'。只需使用'drag($ event)'。 – ajkavanagh

+0

現在它顯示「Uncaught ReferenceError:drag is not defined,allowDrop is not defined」。 – kumaro

+1

對不起,我當時很蠢。你不能像你在做Angular那樣做你正在做的事。即不能將$ scope函數放在常規屬性中。你必須使用'ng-'版本。並沒有任何拖放事件。你需要使用像[ngDraggable](http://ngmodules.org/modules/ngDraggable) – ajkavanagh

回答

6

$scope對象將在「外部角度上下文」中不可用。 每當你想訪問JavaScript中的角度範圍(Outside angular world)時,你需要通過獲取該元素的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>