2014-10-27 5 views
1

Я использовал ng-paste для textarea при вставке ссылки в textarea, я вызываю пользовательскую функцию для сохранения этого значения. Пожалуйста, обратитесь следующий кодangularjs ng-paste не обновляет значение модели

<textarea rows="1" ng-model="myObj.content" 
       ng-paste="getContent(myObj)"> 
</textarea> 

$scope.getContent = function(a){ 
    console.log(a.content); 
} 

Но в консоли всегда я получаю undefined значение. Как я могу получить значение моего объекта?

+0

Отредактировал свой ответ, надеюсь, что это поможет! –

ответ

4

Передача модели на функцию не имеет смысла, поскольку вы уже указали ng-model, поэтому ее значение будет обновляться по мере того, как пользователь вводит что-то в textbox. Если вы хотите отслеживать изменения, вы можете установить $watch для своей модели или указать функцию с помощью ng-change.

Если вы хотите знать, что пользователь вставил, то это еще одна история. Обработка ng-paste может быть сложной задачей. Чтобы получить доступ к фактическому событию, проще всего включить jQuery до angularjs, а затем сделать это, например. следующее:

HTML шаблон

<textarea rows="3" 
      placeholder="copy/paste here..." 
      ng-init="content = null" 
      ng-model="content" 
      ng-paste="paste($event.originalEvent)"> 
</textarea> 

Контроллер

$scope.paste = function (event) { 
    var item = event.clipboardData.items[0]; 
    item.getAsString(function (data) { 
    console.log(data); 
    }); 
}; 

Связанные plunker здесь http://plnkr.co/edit/ea5y5j


enter image description here

+0

Что такое $ event.originalEvent responsability? –

+0

http://stackoverflow.com/q/16674963/1061668 –

0

Просто используйте $timeout, чтобы вызвать обратный вызов пасты после обновления модели.

$scope.getContent = function(a){ 
    $timeout(function() {console.log(a.content)}); 
} 
Смежные вопросы