Я пытаюсь следовать этому [tutorial], но не могу заставить его работать.Угловая директива загрузки файла не обновляется модель контроллера
Мой угловой контроллер регистрирует undefined
для модели, созданной в моей директиве. Вот [JSFiddle] из этого работает созданный мой автор учебника.
Проблема есть вид $scope.myFile
, но контроллер не ($scope.myFile
is undefined
).
Вид отображает {{ myFile.name }}
(как пример my-image.jpg
). Переменная myFile
представляет собой объект JS, содержащий данные по выбранному файлу. Это прекрасно работает. Кажется, что директива присваивает модели значение выбранного файла (и, таким образом, отображает его правильно).
<input file-model="myFile" type="file"/ >
<div class="label label-info">
{{ myFile.name }}
</div>
<button ng-click="uploadDocs()">Click</button>
Вот директива, которую я получил от этого [tutorial].
Поскольку тип ввода file
не может использовать ng-model
, эта директива устанавливает модель, которая будет связана с file
входом, назначая ему каждый раз, когда файл пожаров change
событий.
directive('fileModel', [
'$parse',
function ($parse) {
return {
restrict: 'A',
link: function(scope, element, attrs) {
var model = $parse(attrs.fileModel);
var modelSetter = model.assign;
element.bind('change', function(){
scope.$apply(function(){
if (element[0].files.length > 1) {
modelSetter(scope, element[0].files);
}
else {
modelSetter(scope, element[0].files[0]);
}
});
});
}
};
}
]).
В контроллере я просто войти $scope.myFile
. Это вызывается с помощью кнопки в HTML выше. В идеале я бы загрузил файлы на сервер здесь, но я не могу, потому что $scope.myFile
не определен.
$scope.uploadDocs = function() {
var file = $scope.myFile;
console.log($scope.myFile);
};
Может кто-нибудь сказать мне, почему мнение будет ПОЛУЧАТЬ $scope.myFile
, но журналы контроллера undefined
для $scope.myFile
?
попробуйте инициализировать мой файл в качестве первой строки вашего контроллера: '$ scope.myFile = {}; 'в основном проблема с точкой – harishr
Я сделал plunkr кода, который вы предоставили, и он отлично работает: http://plnkr.co/edit/o9D2Q6Tzkesm5MTyqXFE?p=preview – EvAlex
Опытный этот вопрос сегодня. Передача 'myFile' в функцию 'uploadDocs()', подобную этой 'uploadDocs (myfile)', казалось, сделала это – Akinwale