(function(window, document) { 'use strict'; var angular = window.angular; var module = angular.module('App', []); module.controller('Sample1', [ '$scope', function($scope) { $scope.$watch('text1', function() { window.console.log($scope.text1); }); } ]); module.controller('Sample2', [ '$scope', function($scope) { $scope.$watch('text2', function() { window.console.log($scope.text2); }); } ]); module.controller('Sample3', [ '$scope', function($scope) { $scope.$watch('text3', function() { window.console.log($scope.text3); }); } ]); module.controller('Sample4', [ '$scope', function($scope) { $scope.$watch('text4', function() { window.console.log($scope.text4); }); } ]); module.directive('ngDropCopy', [ '$parse', '$rootScope', function($parse, $rootScope) { return { 'restrict' : 'A', 'require': '^ngModel', 'scope' : { 'ngModel' : '=' }, 'link': function(scope, element) { element.on('input propertychange', function(event) { scope.ngModel = element.val(); if ($rootScope.$$phase) { scope.$evalAsync(); } else { scope.$apply(); } }); } }; } ]); })(window, document);
<div ng-app="App"> <div> <p>Drag&Drop a Text to input[type="text"] or textarea (IE11)</p> </div> <h2>Not Use "ngDropCopy"</h2> <div class="not_use"> <div ng-controller="Sample1"> <input type="text" ng-model="text1" /> <p>↑ng-model="text1":{{text1}}</p> </div> <br /> <div ng-controller="Sample2"> <textarea ng-model="text2"></textarea> <p>↑ng-model="text2":{{text2}}</p> </div> </div> <br /> <h2>Use "ngDropCopy"</h2> <div class="use"> <div ng-controller="Sample3"> <input type="text" ng-model="text3" ng-drop-copy /> <p>↑ng-model="text3":{{text3}}</p> </div> <div ng-controller="Sample4"> <textarea ng-model="text4" ng-drop-copy></textarea> <p>↑ng-model="text4":{{text4}}</p> </div> </div> </div>
.not_use { border: 1px black solid; padding: 10px; margin: 10px; } .use { border: 1px black solid; padding: 10px; margin: 10px; }