Porównaj ceny domen i usług IT, sprzedawców z całego świata

AngularJs, DropZone.Js, MVC4 przeciągnij i upuść oraz podgląd wstępnie załadowanych obrazów)



Html

:
<script src="~/Scripts/jquery-1.9.1.js"></script>
<script src="~/Scripts/DropZone-2.0.1.js"></script>
<script src="~/Scripts/angular.js"></script>
<script src="~/App_Angular/app.js"></script><div ng-app ="myApp" ng-controller ="ProductsCtrl">
<input ng-model="product.Name"/>
<input ng-model="product.PhotoName" id="result"/>
<form id="dropzone" class="fade well">Drop files here</form>
<input type="button" value="Upload Files" ng-click="save(product)"/>

Javascript:
$("#dropzone").dropzone({
url: 'Home/UploadFiles',
paramName: "files",// The name that will be used to transfer the file
maxFilesize: 102,// MB
enqueueForUpload: false,
accept: function (file, done) {
angular.element(document.getElementById('result')).scope()
.$apply(function (scope) {
scope.product.PhotoName = $('#result').val();
}); return done();
}
});function uploadClicked() {
var dz = Dropzone.forElement("#dropzone");
for (var i = 0; i < dz.files.length; i++) {
dz.filesQueue.push(dz.files[i]);
}
dz.processQueue(dz);
$('#innerQue').empty();
}

Udało mi się pomyślnie przekazać nazwę zdjęcia do $ scope.product.PhotoName, gdy metoda zapisu jest wywoływana przez ng-click.
ja

nie

Mogłem przesłać obraz. Nie wiem, jak zadzwonić do "UploadClicked" z kątowej.
Każda pomoc byłaby bardzo mile widziana.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:


Rozwiązane (z pewną pomocą Marka Raikoka).


Kompletne rozwiązanie

:

Html

:
<script src="~/Scripts/jquery-1.9.1.js"></script>
<script src="~/Scripts/DropZone-2.0.1.js"></script>
<script src="~/Scripts/angular.js"></script>
<script src="~/App_Angular/app.js"></script><div ng-app ="myApp" ng-controller ="ProductsCtrl">
<input ng-model="product.Name"/>
<input ng-model="product.PhotoName" id="result"/>
<form id="dropzone" class="fade well">Drop files here</form>
<input type="button" value="Upload Files" ng-click="save(product)"/>


Javascript

:
$("#dropzone").dropzone({
url: 'Home/UploadFiles',
paramName: "files",// The name that will be used to transfer the file
maxFilesize: 102,// MB
enqueueForUpload: false,
accept: function (file, done) {
angular.element(document.getElementById('result')).scope()
.$apply(function (scope) {
scope.product.PhotoName = $('#result').val();
}); return done();
}
});function uploadClicked() {
var dz = Dropzone.forElement("#dropzone");
for (var i = 0; i < dz.files.length; i++) {
dz.filesQueue.push(dz.files[i]);
}
dz.processQueue(dz);
$('#innerQue').empty();
}


Zmień dropzone.js tutaj

:
addedfile: function (file) {
file.previewTemplate = createElement(this.options.previewTemplate);
this.previewsContainer.appendChild(file.previewTemplate);
rem out -->//file.previewTemplate.querySelector(".filename span").textContent = file.name;
add this --> return ($('input[id=result]').val(file.name));


AngularController

:
function ProductsCtrl($scope, $routeParams, $http, $location) {
$scope.products = [];
$scope.product = {};
$scope.save = function (data) {
$scope.product = angular.copy(data);
$http.post('/api/Products', $scope.product)
.success(function () {
window.uploadClicked(); <---------------------- Solution
})
.error(function (data) {
// alert(data);
});
};


DODATKOWA PREMIA DLA PROGRAMISTÓW MVC

:
public ActionResult UploadFiles(IEnumerable<HttpPostedFileBase> files)
{
//Works in Everything and IE10+** if (!string.IsNullOrEmpty(Request.Headers["X-File-Name"]))
{
string path = Server.MapPath(string.Format("~/Uploads/{0}", Request.Headers["X-File-Name"]));
Stream inputStream = Request.InputStream; FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate); inputStream.CopyTo(fileStream);
fileStream.Close();
}
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się