2015-01-29 4 views
1

В моем приложении у меня есть такое мнение:angularJS наблюдать за изменение изображений

 <div class="r-container" image-crop> 
     <img id="photo-cropper" src=""> 
     </div> 

ЦСИ для изображения настройки в контроллере (после imageuploading в браузер):

$scope.files = files;   
var reader = new FileReader(); 
reader.onload = function(e) { 
    $('#photo-cropper').attr('src', e.target.result); 
}; 
reader.readAsDataURL(files[0]); 

, а затем у меня есть такой директива (может быть, есть немного JQuery стиль, но, скажем, это нормально):

.directive('imageCrop', function() { 
    return { 
     restrict: 'EA', 
     link: function postLink(scope, element, attrs) { 
     var $image, originalData; 

       angular.element("#image-crop-modal").on("shown.bs.modal", function() { 
        console.log('postLink'); 
        $image = angular.element(".r-container > img"); 
        originalData = {}; 
        $image.cropper({ 
        multiple: true, 
        aspectRatio: 1.5, 
        data: originalData, 
        done: function(data) { 
         console.log(data); 
        } 
        }); 
       }); 
       angular.element("#save-cropper").click(function() { 
        originalData = $image.cropper("getDataURL"); 
        console.log(originalData); 
        angular.element('#image-crop-modal').modal('hide'); 
        scope.setCroppedData(originalData); 
        $image.cropper("destroy"); 
       }); 

     } 
    }; 
    }); 

и поэтому этот imageCropper является заявл yed only, если в коде зрения я определяю src по умолчанию, когда я изменяю его в контроллере: ничего не происходит - обрезщик не работает: но почему? Как установить его на новом изображении src?

+0

Вы можете показать эту функцию, пожалуйста? scope.setCroppedData (originalData); – micha

+0

Положите директиву на изображение и должен использовать область действия для изображения 'ng-src'. Используйте '$ apply' всякий раз, когда вы меняете область действия со сторонним кодом, поэтому угловой знает, как запустить дайджест – charlietfl

+0

@micha http://fengyuanchen.github.io/cropper/ события отсюда – brabertaser19

ответ

0

В контроллере Angular, изменение DOM вручную не предлагается. Вам лучше использовать директиву для обработки изменения контента, поскольку Angular вызовет так называемый digest loop, чтобы проверить, был ли изменен контент, привязанный к элементу DOM, и соответствующим образом обновить DOM.

В просмотре, использование нг-Src вместо ЦСИ и переместить директиву на элемент <img>:

<div class="r-container"> 
    <img id="photo-cropper" ng-src="imagecontent" image-crop> 
</div> 

Затем в директиве, вы можете прочитать содержимое из $scope.imagecontent. Точно так же, если вы хотите обновить содержимое, необходимо выполнить следующий код:

$scope.evalAsync(function() { 
    $scope.imagecontent = newContent; 
}); 

После $scope.imagecontent обновляются, то DOM будет обновляться по Угловому автоматически. Поэтому я полагаю, что метод урожая в вашем прямом виде может быть таким:

$image.cropper({ 
    multiple: true, 
    aspectRatio: 1.5, 
    data: $scope.imagecontent, 
    done: function(data) { 
    $scope.evalAsync(function() { 
     $scope.imagecontent = data; 
    }); 
    } 
}); 
+0

hm, кажется, что все еще только изображение без плагина выполнено – brabertaser19

+0

Было бы лучше, если бы вы могли поделиться с нами кодом для отладки – Rebornix

+0

обмена кодами - нереальным) ко многим кодам здесь) также ... когда я добавляю ссылку и не устанавливаю 'angular.element (« # image-crop-modal ») .on ("shown.bs.modal", function() {', но по щелчку по этой ссылке - выполняется – brabertaser19

Смежные вопросы