У меня есть директивные «заметки», которые в основном представляют собой виджет заметок, который я могу добавить на любую страницу, и просто добавляю к нему имя и идентификатор, чтобы люди добавляли примечания к этому пункт.AngularJS ng-file-upload не работает внутри ng-repeat
Пользователи должны иметь возможность загружать файлы в свои заметки, используя ng-file-upload, а теперь, но я изо всех сил стараюсь получить $scope.files
, заполненный директивой ng-file-upload. Я почти уверен, что это как-то глупо с масштабом, но я не могу понять это.
Значит, любая идея, почему $ scope.files не заполняется, когда я выбираю файл?
Директива:
angular.module('app').directive('notes', [function() {
return {
restrict: 'E',
templateUrl: 'notes.html',
scope: {
itemId: '@',
itemModel: '@'
},
controller: ['$scope', 'Upload', function($scope, Upload) {
$scope.files = [];
$scope.notes = [
{title: 'first title'},
{title: 'second title'}
];
$scope.$watch('files', function (files) {
console.log(files);
$scope.formUpload = false;
if (files != null) {
for (var i = 0; i < files.length; i++) {
$scope.errorMsg = null;
(function (file) {
uploadUsingUpload(file);
})(files[i]);
}
}
});
function uploadUsingUpload(file) {
file.upload = Upload.upload({
url: '/api/v1/notes/upload_attachment',
method: 'POST',
//headers: {
// 'my-header': 'my-header-value'
//},
//fields: {username: $scope.username},
file: file,
fileFormDataName: 'file'
});
file.upload.then(function (response) {
$timeout(function() {
file.result = response.data;
});
}, function (response) {
if (response.status > 0)
$scope.errorMsg = response.status + ': ' + response.data;
});
file.upload.progress(function (evt) {
// Math.min is to fix IE which reports 200% sometimes
file.progress = Math.min(100, parseInt(100.0 * evt.loaded/evt.total));
});
file.upload.xhr(function (xhr) {
// xhr.upload.addEventListener('abort', function(){console.log('abort complete')}, false);
});
}
}]
};
}]);
Шаблон:
<ul>
<li ng-repeat="note in notes">
{{note.title}}
<div ngf-select ng-model="files"><b>upload</b></div>
</li>
</ul>
<pre style="border: 1px solid red;">{{files | json}}</pre>
Это может сработать, но тогда мне придется использовать глубокие часы или наблюдать за каждым свойством каждого объекта заметки? Не похоже на идеальное решение. Невозможно передать экземпляр файлов из нот directy through в область ng-repeat? – burzum
Можно передать один экземпляр файлов. Но тот же экземпляр обновляется, когда загрузка файла выполняется для другой заметки. Таким образом, вам нужно будет сразу же загрузить файл, поскольку он выбран для одной заметки или поддерживает временную переменную, чтобы отслеживать все изменения файла (просто не уверен, как это работает). http://plnkr.co/edit/oVpgrSWQAcFdV26aVKv7?p=preview – Bharat