ããã«ã¡ã¯ç°¡åãªãã¡ã€ã«ã¢ããããŒããè¡ãããšããŠããŸã:)ãããtype = fileã®å ¥åã¯ãã€ã³ããããŠããªãããã§ãhg-model-instantãè©ŠããŸãããã1.0.2ã«ã¢ããã°ã¬ãŒãããŠãäœãåŸãããŸãã
input type = fileãžã®angularã«ãã£ãŠæäŸãããããã©ã«ãã®ãã€ã³ãã£ã³ã°ã¯ãããŸããã
ãããããã¡ã€ã«å ¥åã¯å®éã®ãã®ã§ã-javascriptã«å¯ŸããŠã®ã¿ããã®ãããªãã€ã³ãã£ã³ã°ã圹ç«ã€å¯äžã®å©ç¹ã¯ããã¡ã€ã«å ¥åãã¯ãªã¢ããããšã§ãã ïŒAngularã¯çŸåšããã¡ã€ã«ã®ajaxã¢ããããŒãã«å¯Ÿãããã¬ãŒã ã¯ãŒã¯ãµããŒããæäŸããŠããªããšæããŸãïŒ
@coli ïŒããã¯å®å šãªçå®ã§ã¯ãããŸããã
input [file]ã§onchangeã€ãã³ãããã£ããã§ããããšã¯çã«ããªã£ãŠããŸãã
https://github.com/lgersman/jquery.orangevolt-ampereã«ã¯ããŸãã«ãã®ã·ããªãªããããŸããXMLHTTPRequestV2ãä»ãããã¡ã€ã«ã®ã¢ããããŒãã§ãã
ãã®ãããinput [file]å€æŽã€ãã³ãããã£ããããŠãããŒãžããªããŒãããã«ãã¡ã€ã«ã®ã¢ããããŒããå®è¡ããç¬èªã®ãã£ã¬ã¯ãã£ããå®è£
ããŸããã
ç§ã¯angularjsã§ãã®æ©èœãèŠããã§ãïŒ
ã¿ã€ããã¡ã€ã«ã®å ¥åãžã®ãã€ã³ãã«é¢ããŠäœãé²æ©ã¯ãããŸãããïŒ ç§ã¯è§£æ±ºçãæ¢ããŠããŸããããããŸããããã®ãèŠã€ããããšãã§ããªãããã§ã...
ç§ã®è§£æ±ºçã¯ããªã¯ãšã¹ããhttp.postã§ã¯ãªãAjaxã ãã§ãã
ç§ã®iPadããéä¿¡ãããŸãã
19:16ã«2013幎3æ1æ¥ãã§ã "jgoldber" < [email protected] [email protected] >æžããŸããïŒ
ã¿ã€ããã¡ã€ã«ã®å ¥åãžã®ãã€ã³ãã«é¢ããŠäœãé²æ©ã¯ãããŸãããïŒ ç§ã¯è§£æ±ºçãæ¢ããŠããŸãããã解決çãèŠã€ãããªãããã§ãã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGi tHubhttpsïŒ//github.com/angular/angular.js/issues/1375#issuecomment-14321221ã§è¡šç€ºããŠãã ããã
ç§ãèŠã€ããæè¯ã®è§£æ±ºçïŒ http ïŒ
ãããããã¯æ¬åœã«èŠãå¿ èŠããããŸãã ãã¡ã€ã«ãéžæããŠã¢ããããŒãã§ããããšã¯ãã»ãšãã©ã®Webã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠéåžžã«éèŠã§ããããããã®å ¥åããµããŒãããããšã¯ãæããã«æ¬ ããŠããæ©èœã§ãã
ãã³ãã ããããã€ã«ã¹ããŒã³ã«è¿œå ããå¿ èŠããããŸãã
ãããæ¯æããå¥ã®å«ã³å£°ã
ng-modelãã¡ã€ã«ã¯HTML5ãã¡ã€ã«APIããã®ãã¡ã€ã«ã«å€ãèšå®ã§ããŸããIE8/ IE9çšã®Flashããã³Silverlightããªãã£ã«ããããŸãã
ãããå€ããã¡ã€ã«ãŸãã¯å ¥åèŠçŽ ïŒãã¡ã€ã«ãžã®åç §ãå«ãïŒã«èšå®ããŸã
ãã®ãœãªã¥ãŒã·ã§ã³ã¯ãå®è£ ãããŠãããã¡ã€ã«ãªãŒããŒã«ãã£ãŠç°ãªããŸãã
...
.directive('file', function() {
return {
restrict: 'E',
template: '<input type="file" />',
replace: true,
require: 'ngModel',
link: function(scope, element, attr, ctrl) {
var listener = function() {
scope.$apply(function() {
attr.multiple ? ctrl.$setViewValue(element[0].files) : ctrl.$setViewValue(element[0].files[0]);
});
}
element.bind('change', listener);
}
}
});
<file name="image" ng-model="inputFile" accept="image/png,image/jpg,image/jpeg" />
次ã«ãxhrã®åŠçãèªåã§è¡ãå¿ èŠããããŸãããããã¯GUIãã€ã³ãã£ã³ã°ããã³ããå€ãã®åŠçããžãã¯ã®ç¯å²å€ã§ãããšæããŸãã
ãããŠããªããæ³ååãæ¬ ããŠãããªãïŒ
var file = $scope.inputFile;
$http.put('http://localhost:5984/demo/d06917e8d1fae1ae162ea7773c003f0b/' + file.name + '?rev=4-c10029f35a5c5ed9bd8cc31bf8589d3c', file, { headers: { 'Content-Type' : file.type } });
ããã¯xhr2ïŒhttp://www.html5rocks.com/en/tutorials/file/xhr2ïŒã®ããã«æ©èœããŸããé·ãäŸã®ã¢ããããŒãURLããã®couchdbããã¥ã¡ã³ããšã³ããã€ã³ãïŒæ·»ä»ãã¡ã€ã«ïŒãèš±ããŠãã ããã
ãã®ãã©ãã·ã¥ããŒã¹ã®FileReaderããªãã£ã«https://github.com/Jahdrien/FileReaderãšFileReaderhttps ïŒ //github.com/francois2metz/ã«äŸåãããã®çŽç²ãªjsFormDataããªãã£ã«ãçµã¿åãããããšã§ãIE8 / 9ã§ãããæ©èœãããããšãã§ãå æ°ãè¯ãããªãã£ã«ã§ã
ç§ã®è§£æ±ºçã¯ããªã倧ãã£ã±ã§ãå°ãªããšãã³ã³ãããŒã©ãŒã®ãããã¿ã€ãããããããŠããäžèšã®jsfiddleãšåãããã倧ãã£ã±ã§ãã...
ã³ã³ãããŒã©å ïŒ
$scope.updateImage = '(' + function () {
alert('moo');
}.toString() + ')();';
åžæããonchangeã³ãŒã«ããã¯ãæåååããã¯ããŒãžã£ã§ã©ããããŸãã
<input type="file" name="image" onchange="{{updateImage}}" ng-model="image">
Angularã䜿çšããŠDOMã«æ¿å ¥ããŸã
æ£ç¢ºã«ã¯ãããã§ã¯ãããŸããããWebkitã§åäœããŸãã ã¯ãã¹ãã©ãŠã¶ãã¹ãã¯è¡ããŸããã§ããã
ç§ã¯1.0.5ã䜿çšããŠããŸããããŸã å£ããŠããŸãã Jgoldberã®äŸã䜿çšããŠãå°ã調æŽããŸããã
http://jsfiddle.net/ADukg/2589/
ãã®äŸã¯1ã€ã®ã³ã³ãããŒã©ãŒã§ã®ã¿æ©èœãããããè€æ°ã®ã³ã³ãããŒã©ãŒããããããããã«ãã¡ã€ã«å ¥åãããå Žåã¯ãããã€ãã®å€æŽãå ããå¿ èŠããããŸãã
IEã§ãŸã ãã¹ãããŠããŸããããç§ã®æšæž¬ã§ã¯ïŒIEãç¥ã£ãŠãããšïŒåäœããªããšæããŸãã
inputèŠçŽ ãåŒæ°ãšããŠåãã¹ã³ãŒãå ã®é¢æ°ãåŒã³åºãããã ãã ãšãããšãããã¯ãã£ã¬ã¯ãã£ãã«å®è£ ããã®ãéåžžã«ç°¡åã§ãã
http://jsfiddle.net/neilsarkar/vQzKJ/
ïŒäžèšã®jsfiddleããå€æŽã@ programmistã«æè¬ïŒ
'use strict';
function filesModelDirective(){
return {
controller: function($parse, $element, $attrs, $scope){
var exp = $parse($attrs.filesModel);
$element.on('change', function(){
exp.assign($scope, this.files);
$scope.$apply();
});
}
};
}
æ§æïŒ
angular.module(...).directive('filesModel', filesModelDirective)
å©çšæ¹æ³ïŒ
<input type="file" files-model="someObject.files" multiple>
ããã«ä¿®æ£ããŠãã ããã
ãŸã åé¡ããããŸã..ããã€ãã®ããŒãžã§ã³ã§ã¯åäœããŸããããšã«ãããµããŒããããŠããŸãã
1.5.0以éãonchangeåé¿çã䜿çšããŠããå Žåã¯ã$ digestãåŒã³åºãå¿ èŠããããŸãã
<input type="file" onchange="angular.element(this).scope().myController.uploadFile(this.files[0]); angular.element(this).scope().$digest();">
ng-changeãšå ¥å/ãã¡ã€ã«ã®ãµããŒããæ¹åããããã®+1ã ãŠãŒã¹ã±ãŒã¹ïŒç»åã®ã¢ããããŒããŒãšããŠãæé©ãªè¡šç€ºã®ããã«ã¢ããããŒãããåã«ãã®ç»åãç·šéïŒãµã€ãºå€æŽãšããªãã³ã°ïŒã§ããããã«ããããšæããŸãã å®è£ ïŒïŒå ¥å/ãã¡ã€ã«ã䜿çšããŠïŒç»åãåç §ããonchangeã€ãã³ãã§ãã¡ã€ã«ããã£ã³ãã¹ã«ç§»åããfabricjsã§ç·šéããŸãã ç§ã¯ã§ããŸãã;éãªã³å€æŽã®å®è£ ãèããããšã¯ã§ããŸããã
cztomsik-1.0.7ã䜿çšããŠããŠããœãªã¥ãŒã·ã§ã³ãæ©èœãããããšãã§ããŸãã-scopeïŒthisïŒé¢æ°ã¯æ£åžžã«è§£æ±ºãããŸãããã³ã³ãããŒã©ãŒãèŠã€ãããŸãããuploadFileé¢æ°ãscopeïŒthisïŒã®ã¡ã³ããŒãšããŠãªã¹ããããŠããŸãã
ããããªãããç§ã¯ãã¯ããã¯ã«ããããªå€æŽãå ããŸããããããã¯ç§ã®ããã«åããŠããããã§ãïŒç§ã¯ãŸã ç§ãæã£ãŠããçç±ãããããŸããïŒ
<input type = "file" name = "file" ng-model = "file" onchange = "invokeUploadFileïŒthisïŒ" />
var invokeUploadFile = functionïŒthatïŒ{
angle.elementïŒthatïŒ.scopeïŒïŒãuploadFileïŒthatïŒ
angle.elementïŒthatïŒ.scopeïŒïŒã$ digestïŒïŒ;
}
jsfiddle / plunkerãæäŸããŠããã ããŸããïŒ
THX
ng-changeãšå ¥å/ãã¡ã€ã«ã®ãµããŒããæ¹åããããã®+1ã ãŠãŒã¹ã±ãŒã¹ïŒç»åã®ã¢ããããŒããŒãšããŠãæé©ãªè¡šç€ºã®ããã«ã¢ããããŒãããåã«ãã®ç»åãç·šéïŒãµã€ãºå€æŽãšããªãã³ã°ïŒã§ããããã«ããããšæããŸãã å®è£ ïŒïŒå ¥å/ãã¡ã€ã«ã䜿çšããŠïŒç»åãåç §ããonchangeã€ãã³ãã§ãã¡ã€ã«ããã£ã³ãã¹ã«ç§»åããfabricjsã§ç·šéããŸãã ç§ã¯ã§ããŸãã;éãªã³å€æŽã®å®è£ ãèããããšã¯ã§ããŸããã
cztomsik-1.0.7ã䜿çšããŠããŠããœãªã¥ãŒã·ã§ã³ãæ©èœãããããšãã§ããŸãã-scopeïŒthisïŒé¢æ°ã¯æ£åžžã«è§£æ±ºãããŸãããã³ã³ãããŒã©ãŒãèŠã€ãããŸãããuploadFileé¢æ°ã¯scopeïŒthisïŒãªããžã§ã¯ãã®ã¡ã³ããŒãšããŠãªã¹ããããŸãããå ¥æããã³ã³ãããŒã©ãŒãåãå€ããŸã
Uncaught ReferenceErrorïŒuploadFileãå®çŸ©ãããŠããŸããblah.jsïŒ15
$ scope.uploadFile blah.jsïŒ15
invokeScope blah.jsïŒ4
onchangeâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ããã
+1ã ãŠãŒã¶ãŒããã¡ã€ã«ãéžæãããšãã«HTML5ãã¡ã€ã«ã®ã¢ããããŒããéå§ããããã«å¿ èŠã§ãã åé¿ããã®ã¯ç°¡åã§ãããããã§ããŸããããšæããŸãã
+1ã å®è£ ããŠãã ãããå®è£ ããªãããšã¯å®å šã«çŽæçã§ã¯ãããŸããã
+1
+1
ããã1幎以äžçµã¡ãŸããããAngular 1.2.0 stilã«ã¯å ¥åãã¡ã€ã«ã®ãã€ã³ãããããŸãã...æ©èœãè¿œå ãããªãçç±ãããããŸãããïŒ å®è£ ã«ã¯ããã€ãã®è¯ã解決çããããŸãã ãã®åé¡ã«ã€ããŠãè§åºŠã®ããããŒã ã¡ã³ããŒã®åçããé¡ãããŸãã
æè¯ã®è§£æ±ºçã®1ã€ãåŒçšããã ãã§ãïŒããã¯äžæ¹åã®ããŒã¿ãã€ã³ãã£ã³ã°ã§ãããããã§ãäœããªãããã¯ãŸãã§ããæ€èšŒãšã¢ãã«ã®æŽæ°ã¯IE7ã§ãæ©èœããŸãïŒïŒ
æå³
/**
* <strong i="8">@ngdoc</strong> inputType
* <strong i="9">@name</strong> angular.module.ng.$compileProvider.directive.input.file
*
* <strong i="10">@description</strong>
* HTML file input field.
*
* <strong i="11">@param</strong> {string} ngModel Assignable angular expression to data-bind to.
* <strong i="12">@param</strong> {string} multiple Allows multiple files selection.
* <strong i="13">@param</strong> {string=} name Property name of the form under which the
control is published.
*
* <strong i="14">@example</strong>
<doc:example>
<doc:source>
<script>
function Ctrl($scope) {
}
</script>
<form name="myForm" ng-controller="Ctrl">
file: <input type="file" ng-model="file"> single file selection.<br/>
files: <input type="file" ng-model="files" multiple> multi-file selection.<br/>
<tt>file.name = {{file.name}}</tt><br/>
<tt>files.length = {{files.length}}</tt><br/>
</form>
</doc:source>
<doc:scenario>
it('should change state', function() {
expect(binding('file.name')).toBeUndefined();
input('file').select('a file name');
expect(binding('file.name')).toEqual('a file name');
});
</doc:scenario>
</doc:example>
*/
'file': fileInputType,
é¢æ°
function fileInputType(scope, element, attr, ctrl) {
element.bind('change', function() {
scope.$apply(function() {
var files = element[0].files,
isValid = true;
if (msie < 10) {
files = [element[0].value];
}
if (attr.accept) {
var i, j, acceptType, fileType,
types = map(attr.accept.split(','), function(t) { return trim(t).split('/'); });
for (i = 0; i < files.length && isValid; ++i) {
fileType = files[i].type.split('/');
isValid = false;
for (j = 0; j < types.length && !isValid; ++j) {
acceptType = types[j];
isValid = acceptType[0] === fileType[0] && (acceptType[1] === '*' || acceptType[1] === fileType[1]);
}
}
}
ctrl.$setValidity('file', isValid);
var viewValue;
if (isValid) viewValue = attr.multiple ? files : files[0];
ctrl.$setViewValue(viewValue);
});
});
}
+1
+1
@ntrpãã®å€æŽãPRããŠã¿ãŸãããïŒ
ãã®å€æŽã¯å°ã詳ãã説æããŠãã¹ãããå¿ èŠããããŸããçŸæç¹ã§ã¯ããããæéããããŸããã
+1
+1
-1ïŒtrollfaceïŒ
åè«+1
+1
+1
+1
+1
+1
input [type = file]ã¯ããã¹ãŠã®ã¿ãŒã²ãããã©ãŠã¶ã§äœ¿çšã§ããããã§ã¯ãªãFile APIãæ瀺çã«äœ¿çšããªãéããå®éã«ã¯åæ¹åã®ãã€ã³ãã£ã³ã°ã§ã¯ãããŸããã ãããng-modelã«è¿œå ããããšã¯ããŸãæå³ããããŸãããããã®æ©èœã®ããã€ãã®ããªãšãŒã·ã§ã³ããµããŒããããã©ã°ã€ã³ã¯ãããããããŸãã ãã°ããã®éãããããã©ã°ã€ã³ã«å§ä»»ããã ãã§ã¯å€§äžå€«ã§ã¯ãããŸãããïŒ
@caitpããã§ãããng-changeãä»ããŠchangeã€ãã³ãã«ãã€ã³ãã§ããããšã¯çã«ããªã£ãŠããŸãããããã¯æ©èœããŸããã
åäœããªããã1ã€ã®ããšã¯ããã©ãŒã ã®æ€èšŒã§ãã ãã¡ã€ã«ãµããŒãã¯ãå€ããã©ãŠã¶ã«å¯Ÿããäžæ¹åã®ããŒã¿ãã€ã³ãã£ã³ã°ãã©ãŒã«ããã¯ãåããæ°ãããã©ãŠã¶ã«å®è£ ããå¿ èŠããããšæããŸãã ãã®è§£æ±ºçãå®è¡å¯èœã§ãªãå Žåãç§ã®æèŠã§ã¯ãæ©èœãå®è£ ãããŠããªãçç±ãšããã®ãµããŒãã®æ¬ åŠãåŒãèµ·ããåé¡ã解決ããæ¹æ³ãwikiã«æ確ã«èšèŒããå¿ èŠããããŸãã å ¥åãã¡ã€ã«ã®ããŒãºãæåã«äœ¿çšãããšãã«è§£æ±ºããåã«ãå€ãã®æéã倱ã£ãããšãèŠããŠããŸãã
éèŠãªã®ã¯ããã¡ã€ã«åã¯ã¢ãã«ã«ãã€ã³ããããŠããããã¢ãã«ã«ãã€ã³ãããããšã¯å®éã«ã¯æå³ããããŸããã Fileã€ã³ã¿ãŒãã§ã€ã¹ã®ãã¹ãŠã®ããããã£ã¯èªã¿åãå°çšã§ãããFileListã€ã³ã¿ãŒãã§ã€ã¹ã¯ãã¡ã€ã«ã®ã³ã¬ã¯ã·ã§ã³ã«ãããŸããã åæ¹åãã€ã³ãã£ã³ã°ã®å®¹éããªãããããããããããã«ng-modelã䜿çšããæ¬åœã®çç±ã¯ãããŸããã 代ããã«change
ã€ãã³ãã«ãã€ã³ãããã®ã¯ç°¡åã§ãå¿
èŠã«å¿ããŠå®£èšçã«äœ¿çšã§ããããã«ããã®æ©èœãè¿œå ãããã£ã¬ã¯ãã£ããç°¡åã«äœæã§ããŸãã
ããããng-modelã®åäœã«åŸãèœåããªãå Žåããããng-modelã®äžéšã«ããããšã¯ã©ã®ããã«æå³ããããŸããïŒ
ãã¡ã€ã«ã®ã«ã¹ã¿ã ã€ã³ã¿ãŒãã§ã€ã¹ãäœæã§ããªãçç±ã¯ãããŸãããangularã¯ããæç¹ã§ãããäœæããå¯èœæ§ããããŸãããç§ã®æèŠã§ã¯ng-modelã§ã¯å®éã«ã¯æå³ããããŸããã ä»ã®éçºè ãããã«ã€ããŠã©ãæã£ãŠãããããããŸããã圌ãã¯åæãããããããŸããããããã§ãªããããããŸããã ããããç§ã®èŠ³ç¹ããã¯ãinput [type = file]ãng-modelã«é©åããªããããå¥ã®ãã£ã¬ã¯ãã£ãã®æ¹ãçã«ããªã£ãŠããŸãã
input [type = file]ã«å¯ŸããŠå®éã«ã§ããããšã¯ãå€ãå€æŽããããšãã®$ setViewValueïŒããã¯å®éã«ã¯æå³ããããŸããïŒãšãã¹ã¯ãªããã®å€æŽïŒãŸãã¯åºæ¬çã«ã¯åºæ¬çã«ïŒã«ãã£ãŠåŒãèµ·ããããã¢ãã«å€ã®å€æŽãç¡èŠããããã«ngModelãå€æŽããããšã ãã§ãã $ watchãå®å šã«ç¡å¹ã«ããã ãã§ãïŒã æ€èšŒã«é¢ããŠã¯ãç§ãã¡ãæ¬åœã«ãµããŒãã§ããã®ã¯ng-requiredã ãã§ããã€ãŸããä»ã«äœãã§ããã®ã§ããããã
ngModelã§ããã¡ã€ã«å ¥åããµããŒãã§ããããã«ãããã®ã§ãããã©ã®ããã«æ©èœãããããããŸãããngModelã€ã³ã¿ãŒãã§ã€ã¹ã«é©åããŸããã
ç§ã¯ãã®å£°æã«åæããŸãããåã«è¿°ã¹ãããã«ãéçºè ãå¿ èŠãªæ©èœãå®çŸããããã«äœãããå¿ èŠãããããç解ã§ããããã«ãwikiãŸãã¯äžè¬çã«ããã¥ã¡ã³ãã§ãããããã«åŒ·èª¿ããå¿ èŠããããŸãã
@ntrp well docsãããã¯å€§æè¿ã§ããæåºããŠããã ããã°ãåãã§ç¢ºèªãããŠããã ããŸã:)
Angularèªäœã«ç¹å®ã®ãã£ã¬ã¯ãã£ããè¿œå ããããšã¯è§£æ±ºçã«ãªããŸããïŒ
ç§ã¯åã®å£°æã«åæããŸãããå°ãªããšãå°ãå¥åŠã«æããŸã
Angularã®ãããªãã¬ãŒã ã¯ãŒã¯ã«ã¯ãéæããããã®æ確ã§ã¯ãªãŒã³ãªæ¹æ³ããããŸãã
ãã...
ããã¯ãããããç§ãããããšãããšãã«çŽé¢ããªããã°ãªããªãã£ãæãæ··ä¹±ããããšã§ãã
ãã¡ã€ã«ãã¢ããããŒããã...
ããã @ caitp ããŠã£ãã®ãã«ãªã¯ãšã¹ããå®éã«ã¯ç©æ¥µçã«è©äŸ¡ãããŠããªãããšãå°ãåã«èªãã ã®ã§ãè²¢ç®ããããšãæ°ã«ããŸããã§ããã ããã«ç©ºãæéãããã°ãåãã§è²¢ç®ããŸã:)ããããšãã
ngChangeãã£ã¬ã¯ãã£ãã§ngModelãååšããå¿ èŠãããããšã«æ°ã¥ããŸããã§ãããããããããã§ngModelã«ã€ããŠå€ãã®è°è«ãè¡ãããŠããçç±ã ãšæããŸãïŒããã
ããããngChangeãngModelãå¿ èŠãšããæ£ç¢ºãªçç±ã¯äœã§ããïŒ ç§ã®èãã§ã¯ãinput [type = file]ãã£ãŒã«ãã®changeã€ãã³ãã«ãã€ã³ãã§ããããšã¯ããã¡ã€ã«ãéžæãããåŸã§ãã©ãŒã ãèªåéä¿¡ããå Žåãªã©ããŸã£ããçã«ããªã£ãŠããŸãã ãã®ãããªå Žåãç§ã¯ãã£ãŒã«ãã®å€ãäœã§ããããæ¬åœã«æ°ã«ããŸããã ç§ã¯ãããå€ãã£ãããšã ããæ°ã«ããŸãã ãã®ãããªããšãåŠçããããã«ç§ãèŠã€ããæè¯ã®æ¹æ³ã¯ã @ cztomsikã«ãã£ãŠèšåãããäžèšã®åé¿çãä»ããããšã§ãïŒ
onchange="angular.element(this).scope().fileChangedHandler()"
ãããŠãããã¯æ¬åœã«æåã®è§£æ±ºçã®ããã«ã¯æããŸããã
ng-change
ã¯ãä»ã®ã€ãã³ããã³ãã©ãã£ã¬ã¯ãã£ããšåãããã«ååãä»ããããŠããŸãããå®éã«ã¯change
ã€ãã³ãã®ãã³ãã©ã§ã¯ãããŸããã ngModelControllerã«$viewChangeListener
ãè¿œå ããã ãã§ã $setViewValue
ãåŒã³åºããããã³ã«ããªã¬ãŒãããŸãã
æ®å¿µãªååã ãšæããŸã
ããã¯ããã®ã³ã¡ã³ãã§éããããïŒ1236ã®è€è£œã§ãïŒ https ïŒ
軜éã§ãããªããæ©èœçã§ãããframewokãŠãŒã¶ãŒã«uxã¹ã¿ã€ã«ã匷å¶ããå¿ èŠããªãããã«ãããå®è£ ããæ¹æ³ã«ã€ããŠã®ææ¡ããªãéãããããæ€èšããŸãã ããããçŸæç¹ã§ã¯ããã¡ã€ã«ã¢ããããŒãã®åé¡ã¯ååã«è€éã§ãããããã³ã¢ã®å€éšã«ããå¯èœæ§ãé«ãseoarateã¢ãžã¥ãŒã«ãšããŠè§£æ±ºããå¿ èŠããããšèããŠããŸãã
+1
@IgorMinarã¯ãããèŠãŠãã ãããå°ãæ±ãã§ãããéåžžã«èå³æ·±ãå®è£ äŸã§ãïŒ //github.com/danialfarid/angular-file-uploadã @danialfaridã¯ããã§å€§ããªé²æ©ãéããŠããŸãã
ããããã¹ãŠã®åé¡ã§ãããã©ããã確èªããŠãã ãããããã€ãã®åé¡ãããã€ãã®ã³ã¡ã³ãã§éãããŠããŸãã ngUploadã¢ãžã¥ãŒã«ãæäŸããå¿ èŠããããŸãïŒ smile:ã ãã¶ããhtml5å®è£ ãæäŸãã httpsïŒ //github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills#file-apiã§äœ¿çšäŸãhttp://docs.angularjs.org/guideã«è¿œå ã§ã
ã©ã®ããã«è§£æ±ºããããšèããŠããŸããïŒ
+1
+1
+1
+1
+1
+1
+1
+1
ãããŒããã®æ®µéã§ã¯å°ãæ¥ããããã§ãã
+1
ããã¯ãã¿ãŒã²ãããã©ãŠã¶ã¯ããã¹ãŠã®ãµããŒããããŠããªããšãã確ãã«ããã¡ã€ã«å
¥åã®2ãŠã§ã€ãã€ã³ãã£ã³ã°ãæã£ãŠããããšã¯æ¬åœã«ããšã¯ã§ããŸãããã¡ã€ã«ã®API ïŒhttp://caniuse.com/fileapiãïŒ---ããããå Žåã§ãã圌ããã§ããã input[type=file]
ãšã«ããã
ç³ãèš³ãããŸããããããã¯äœãããWebãã©ãããã©ãŒã ã®åé¡/ã»ãã¥ãªãã£æ©èœã®åé¡ã§ãã ãããå®è¡å¯èœã§ããã°ãããã¯å®è¡ãããŸã
@caitpç§ã¯ããªããèšã£ãŠããããšãå®å šã«ç解ããŠããŸããããããã¯ä»ã®äœãããWebãã©ãããã©ãŒã ã®åé¡/ã»ãã¥ãªãã£æ©èœã®
ããšãã°ããã®ã©ãããŒã®ãããªåçŽãªãã®ãå§ãŸãã§ãã
Angular 2.0ã®æ¹åæ§ïŒAngularã®ã¿ã®éECMAã€ãã£ãªã ã®ãã©ã³ã¹ãã€ã«ïŒãèãããšããWebãã©ãããã©ãŒã ãã®å¶éã¯åé¡ã«ãªããªãã¯ãã§ãã
@everyone elseïŒãã®å ŽåãEmberã¯äœãããŸããïŒ
ç·šéïŒãã©ã³ã¹ãã€ã«ã¹ããŒãã¡ã³ããããå¿ é ããåé€ããŸãã
_ç°¡åãªèª¬æã_Angular2.0ã¢ããªã®æ§ç¯ã«ã¯ããã©ã³ã¹ãã€ã«ãããèšèªãéECMAã€ãã£ãªã ã¯å¿ èŠãããŸããã ãã¬ãŒã³ãªES5ã³ãŒããåé¡ãªã䜿çšã§ããŸãã Angular 2.0ãœãŒã¹ããã«ãããå Žåã¯ãtraceurã䜿çšããŠã³ã³ãã€ã«ããå¿ èŠããããŸãã åœç¶ãtraceurã䜿çšããŠç¬èªã®ã¢ããªãæ§ç¯ããAngularå ã§äœ¿çšããŠããã®ãšåãæ©èœãå©çšã§ããŸãããããã¯å®å šã«ãªãã·ã§ã³ã§ãã ã¢ããŠã³ã¹ã§ãã®ç¹ã«ã€ããŠæ··ä¹±ããã£ãå Žåã¯ç³ãèš³ãããŸããã
@EisenbergEffectç§ã®æªãã ç§ã¯ãããç¥ã£ãŠããã®ã§ãæ ¡æ£ãæ¹åããå¿ èŠããããŸãã ã³ãŒããŒã¯ãããŸããïŒ
ãã¬ãŒã ã¯ãŒã¯ã¯ãWebãã©ãããã©ãŒã ã®å¶éãå®éã«åé¿ããããšã¯ã§ããŸããã åæ§ã«ããã©ãŠã¶ã«èªã¿åãå°çšIDLå±æ§ãžã®æžã蟌ã¿ã匷å¶ããããšã¯ã§ããŸããïŒããã«ããããã¡ã€ã«ã®åæ¹åãã€ã³ãã£ã³ã°ãå®éã«å£ããŸãïŒããŸãããã©ãŠã¶ã«ãã¡ã€ã«ã·ã¹ãã ãå ¬éããããã«åŒ·å¶ããããšãã§ããŸãããããã«ãããå®éã«å®è¡ã§ããªããªããŸããããã§é¢çœããã®ã¯äœã§ã
@caitpç§ã¯ãã®åé¡ããã°ãããã©ããŒããŠããŸãã AngularãåçŽãªãã¡ã€ã«éžæå ¥åããµããŒãããã®ã«ååãªã³ãã¥ããã£ã®èŠæãããããã«æãããŸãã çŸåšïŒç§ãééã£ãŠããªãéãïŒããã¡ã€ã«ãåãå ¥ããAngularã䜿çšããŠXHRçµç±ã§ã¢ããããŒãããç°¡åãªã¢ããªãæ§ç¯ããããšã¯ãåŸãã¹ãæšå¥šãã¿ãŒã³ããããŸãããïŒ ããã¯ããåæ¹åãã€ã³ãã£ã³ã°ãããã§ã¯æå³ããªããªããããç³ãèš³ãããŸããããããè¡ãããšãã§ããªãã以å€ã«ãå°ãªããšã泚æãæã䟡å€ã®ããæ©èœã®ããã«èãããŸãã
ããããããã®äŒè©±ã®æ¹åããAngularã¯ãããã©ã®ããã«ãµããŒãã§ããã§ããããïŒãã«åãçŽãããšãã§ããŸãã 代ããã«ããããã¯ç§ãã¡ã®çŸåšã®ãã¿ãŒã³ã«é©åããŸãããã
ãã¡ã€ã«å ¥åãžã®ãã€ã³ãã¯ééããªãå¯èœã§ããå®éãAngularJSã®ä»¥åã®ãããžã§ã¯ãã§ãããå®è¡ããŸããã
ãã¡ã€ã«å ¥åãšã®åæ¹åãã€ã³ããã§ããªããšããäºå®ã¯ã»ãã¥ãªãã£æ©èœã§ãããããã¯çã«ããªã£ãŠããŸãã äœæè ã¯ã¹ã¯ãªãããä»ããŠãã¡ã€ã«ãã¹ãèšå®ããããšã¯ã§ããŸããããäžæ¹åã«ãã€ã³ãããªãã®ã¯ãªãã§ããïŒ
確ãã«ããã¯ãã©ãã€ã ãç ŽããŸããããããng-changeãååŸãããããã³ã°ãªãã§ãã¡ã€ã«APIãä»ããŠãã¡ã€ã«ã«ã¢ã¯ã»ã¹ããæ©èœãååŸããããšãæå³ãããã©ãããæ¬åœã«æ°ã«ããŸããïŒ jQueryã¯ãã¡ã€ã«å ¥åã®å€æŽã€ãã³ãã«ãã€ã³ãã§ããŸãããAngularã®æ¹æ³ã¯éåžžã«ç¥èãªã®ã§ãã³ã³ãããŒã©ãŒå ã§ãã€ã³ãããããšã¯ã§ããŸãããïŒ ããã¯ã¢ãŒããã¯ãã£ã®æè¡çãªå¶éã§ããããããšãåãªãã€ããªãã®ãŒã®éå£ã§ããïŒ
åæããŸãããç§ã¯åæ¹åãã€ã³ãã£ã³ã°ã«ã¯ããŸãé¢å¿ããããŸããã§ããã ããŒããé£ã³è¶ããã«ãããã¥ã¡ã³ãã®æ®ãã®éšåãšäžç·ã«ãã¡ã€ã«ãæçš¿ãããã£ãã ãã§ãã
2014幎5æ20æ¥ã«ã¯ã7:53 AMã§ããžã£ã¹ãã£ã³ã»ã¢ã«ãŒã< [email protected] [email protected] >æžããŸããïŒ
@c aitphttpsïŒ//github.com/caitpç§ã¯ãã®åé¡ããã°ãããã©ããŒããŠããŸãã AngularãåçŽãªãã¡ã€ã«éžæå ¥åããµããŒãããã®ã«ååãªã³ãã¥ããã£ã®èŠæãããããã«æãããŸãã çŸåšïŒç§ãééã£ãŠããªãéãïŒããã¡ã€ã«ãåãå ¥ããAngularã䜿çšããŠXHRçµç±ã§ã¢ããããŒãããç°¡åãªã¢ããªãæ§ç¯ããããšã«ã¯ãåŸãã¹ãå ¬åŒã®ãã¿ãŒã³ããããŸãããïŒ ãããã§ã¯åæ¹åãã€ã³ãã£ã³ã°ãæå³ããªããªããããç³ãèš³ãããŸããããããè¡ãããšã¯ã§ããŸããã以å€ã«ãå°ãªããšã泚æãæã䟡å€ã®ããæ©èœã®ããã«ã¯èãããŸãããã
ããããããã®äŒè©±ã®æ¹åããAngularã¯ãããã©ã®ããã«ãµããŒãã§ããã§ããããïŒãã«åãçŽãããšãã§ããŸãã 代ããã«ããããã¯ç§ãã¡ã®çŸåšã®ãã¿ãŒã³ã«é©åããŸãããã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGi tHubhttpsïŒ//github.com/angular/angular.js/issues/1375#issuecomment-43636326ã§è¡šç€ºããŠãã ããã
次ã«ãç¹å®ã®ãã©ãŒã ã³ã³ãããŒã«ã«å¯ŸããŠng-modelã®åäœã倧ããç°ãªãå ŽåããããŸãã次ã«ããå€ããfoobarblah.txtãã«å€æŽãããšããã©ãŒã ã³ã³ãããŒã«ãééã£ããã¡ã€ã«ãéä¿¡ããã®ã¯ãªãã§ããããªã©ã®ãã°ãå ±åãã人ãããŸããäžè²«æ§ã®ãªãAPI->æªãã
ngModelã¯ãç¹å®ã®ãã¿ãŒã³ã«é©åããããšãæå³ããã¢ããªã±ãŒã·ã§ã³ã®äœæè ããªãã«ããã®ãéåžžã«é£ããããããã®ãããªãã®ã«ã¯å®å šã«çæ³çã§ã¯ãããŸããã ãã ããangular.dartãšv2.0.0ãããã¿ã€ãã«ã¯ããã«å¯Ÿãã解決çããããããå°æ¥çã«ã¯ãããæ¹åãããã§ãããã ããããng-modelãçŸåšè¡ã£ãŠããããšããã¹ãŠç¡èŠããå¥ã®ng-modelã®åäœãå®éã«è¿œå ããããšã¯ã§ããŸãããããã¯æå³ããããŸããã
ãã¡ã€ã«ãåãå ¥ããAngularã䜿çšããŠXHRçµç±ã§ã¢ããããŒãããŸã
@guruwardã¯ãè¡ææ³¢ããªãã£ã«ãªã©ã®äœ¿çšã匷å¶ããã«ã1.xã®ãã¹ãŠã®ã¿ãŒã²ãããã©ãŠã¶ã§ããããµããŒãããããšã¯ã§ããŸããã ãããå¯èœã«ãããµãŒãããŒãã£ã®ã¢ãžã¥ãŒã«ãããã代ããã«äœ¿çšã§ããŸãã angle-file-uploadã¯ãshockwave polyfillãšhtml5ãã€ãã£ãããŒãžã§ã³ãåæã«åºè·ããé©åãªããŒãžã§ã³ãéžæããŸãã ãããã£ãŠãããã¯æªã解決çã§ã¯ãããŸããããããå®è¡ããå Žåã¯ã匷ããå§ãããŸãã
ãããããããç§ãã¡ãã³ã¢ã«å ¥ããããšãã§ãããã®ãã©ããã¯ããããŸãããè¡ææ³¢ããªãã£ã«ãã³ã¢ã«èŒžéããããšã«ã€ããŠåœŒãã©ãæãããã€ãŽãŒã«ã«å°ããå¿ èŠããããŸãã
ç§ã¯ããã人ã ã決ããŠãããããªããŠãŒã¹ã±ãŒã¹ã ãšèšã£ãŠããã®ã§ã¯ãããŸãããç§ã¯ããããããããšæã£ãŠããããšãç解ã§ããŸããç§ã¯ãããngModelãã¿ãŒã³ã«é©åããªããšèšã£ãŠããã ãã§ãããããŠãã¹ãŠã®ã¿ãŒã²ãããã©ãŠã¶ããµããŒãããããããã®ããã«ãã¬ãŒã ã¯ãŒã¯ãå£ããŸãã
ããã«ãµãŒãããŒãã£ã®ã¢ãžã¥ãŒã«ã䜿çšããããšã®å®³ã¯äœã§ããïŒ
ãã®ããªãã£ã«ã¯ãã©ãã·ã¥ãå¿ èŠãšããŸããã
@jreadingã¯ããªãã£ã«ã§ã¯ãªãã以åã¯ãã©ãã·ã¥ã¢ããããŒããŒã«å梱ãããŠããŸãããããããããŸã ã©ããã«ãããŸãã
ãããè¡ã£ãŠããã®ã¯ããã¹ãŠã®ã¿ãŒã²ãããã©ãŠã¶ã§å©çšã§ããããã§ã¯ãªãFile APIã«äŸåããŠãããããAngular1.xã³ã¢ã§ã¯åé¡ããããŸãã
ãã®APIããªããã°ãshockwaveã®ãããªãã®ãªãã§ãã¡ã€ã«blobã«å°éããæ¹æ³ã¯ãããŸããã
ãã©ãã·ã¥ã®ä»£ããã«iframeã䜿çšããŠããã®ã§ããããèããŠãããããããŸããã ã»ãã³ãã£ã¯ã¹ãè°è«ãã代ããã«ãããŒããããã¯ã©ãã§ããïŒ ãã¡ã€ã«API察å¿ãã©ãŠã¶ã®ãã¡ã€ã«å ¥åã®ng-changeããå§ããŸãããã
@jreadingæ®å¿µãªãããããã¯ããŸã ãµããŒããããŠããIE9ãå«ãAPI察å¿ã§ã¯ãªããã©ãŠã¶ãŒã«ã¯åœ¹ç«ã¡ãŸããã IE9ã®ãµããŒãã«äŸåããŠãã人ã®ããã®åé¿çããªããã°ããµããŒããããŠãããã©ãŠã¶Aã§åäœããããµããŒããããŠããªããã©ãŠã¶Bã§åäœããAPIãã³ã¢ã§åºè·ããããšã¯ã§ããŸããã ããããiframeã¯ãã¡ã€ã«ã®å 容ãblobãšããŠå ¬éãããã¢ããããŒãå¯èœã«ããŸããã Hnngggggã
ããã«å¯Ÿãã解決çã¯ãµãŒãããŒãã£ã®ã¢ãžã¥ãŒã«ã«ãããã¢ããªã±ãŒã·ã§ã³ãé©åã§ãããšæããå Žåã«äœ¿çšã§ããŸãã ãããã³ã¢ã«å ¥ãããšãAïŒãµãŒãããŒãã£ã®ã¢ãžã¥ãŒã«ã«èŠåŽããBïŒãã¹ãŠã®ã¿ãŒã²ãããã©ãŠã¶ããµããŒãã§ããªããããããã¯åé¡ã«ãªããŸãã
ããã¯ç§ã®æèŠã§ããããããã€ãŽãŒã«ãä»ã®èª°ããåæããªãã§ãããããããã§ã¯ãããæ£ããã¢ãããŒãã§ã¯ãªããšæããŸãã
ãµãŒãããŒãã£ã®ã¢ãžã¥ãŒã«ãæ©èœããå¿ èŠãªå Žåããããã䜿çšããããšã®å®³ã¯äœã§ããïŒ
ããããã³ã³ãããŒã©ãŒã§äœ¿çšå¯èœã§ããå¿ èŠãããããšãå®éã«æ瀺ããããšã¯ãããŸããã ç§ã¯æ足ã«åºãããŸãããç§ãèŠãæ倧ã®ãŠãŒã¹ã±ãŒã¹ã¯ããã¡ã€ã«å ¥åããã€å€æŽãããããç¥ãæ©èœãšããããæ®ãã®ãšã³ããã€ã³ãã«éä¿¡ããæ©èœã§ããããã¯ããã®iframeãœãªã¥ãŒã·ã§ã³ãŸãã¯ãã¡ã€ã«APIãšAngularã§å©çšã§ããŸããããã¯ã
ãµãŒãããŒãã£ã®ã¢ãžã¥ãŒã«ãå¯äžã®æ¹æ³ã§ãããç§ã®ããã°æçš¿ã®ãããªç©æ¥µçãªæ¡åŒµæ©èœã§ãïŒã¢ããããŒãã¯ãããŸãã!!ïŒãã質åãæ¯ãè¿ã£ãŠããææ°ã®ãã©ãŠã¶ãŒçšã®ããåªããAPIã䜿çšããããšã®å®³ã¯äœã§ããïŒããšå°ããããšãã§ããŸãã
ãææ°ã®ãã©ãŠã¶çšã®ããåªããAPIã䜿çšããããšã®å®³ã¯äœã§ããïŒã
ãã®è°è«ã¯æ©äŒè²»çšãèæ ®ããŠããªããã匱ãã§ãã ç§ãã¡ïŒã³ã¢ããŒã ïŒãåãçµãã¹ãããšã¯ä»ã«ããããããããŸãã
ãã£ããã ã ã¡ããã©å€§ããªã®ã£ãããšäœãã¶ãäžãã£ãŠããæç©ã®ããã«æããŸãã
ããã§ã®åé¡ã¯ããããngModelã§æ©èœãããæ¹æ³ã«é¢ãããã®ã§ã¯ãããŸããã ngModelã¯FileListãå ¥åãã£ãŒã«ãããã¹ã³ãŒãã«å ¬éã§ãããšæããŸãããéã«ãã¢ãã«ãnull / undefinedã«èšå®ããããšã ãããµããŒãããããšãèš±å¯ããŸãã ããŒãµãŒ/ãã©ãŒããã¿ãŒã¯ããããäœããããããªããŒã¿ãŒã¯ãã¡ã€ã«ã®æç¡ã®ãã§ãã¯ãªã©ã®åçŽãªããšãè¡ãã ãã§ãã
åé¡ã¯ãïŒåè¿°ã®ããã«ïŒãã¡ã€ã«APIãµããŒãããªããšãããŒã¹ã©ã€ã³ãIE9ã§ããããã®ãããªãã®ãããªãã£ã«ããããšã¯ã³ã¢ã«ãšã£ãŠåé¡å€ã§ããããšãèãããšãã³ã¢ã«å¯ŸããŠãããé©åã«è¡ãããšã¯äžå¯èœã§ãããšããããšã§ãã
ããã«ãã¯ãã¹ãã©ãŠã¶äºæã§ã¯ãªãæ¹æ³ã§ãã®å ¥åãåŠçããããšãããšããµãŒãããŒãã£ã®ãœãªã¥ãŒã·ã§ã³ãé£ãããªããã³ã¢ãœãªã¥ãŒã·ã§ã³ãšæŠã/ç¡å¹ã«ãã/åé¿ããå¿ èŠããããŸãã
ãããåŠçããéã³ã¢ãœãªã¥ãŒã·ã§ã³ã¯ãã§ã«ååšãããããã¯ãã®åé¡ã®è°è«ãšåã®åé¡ã§èšåãããŸãã
ç§ãã¡ããããããšæã倧ããªåœ±é¿ãäžãããã®ã¯ä»ã«ããããããããŸãã ããã¯æ¯èŒçäžè¬çãªã±ãŒã¹ã§ããããšãç解ããŠããŸãããæ¢åã®ãœãªã¥ãŒã·ã§ã³ã§ã¯äžååãªçç±ããŸã èããŠããŸããã
ãã®è°è«ã«æå ¥ããããšãã«ã®ãŒã®äžéšã¯ãå¿ èŠã«å¿ããŠæ¢åã®ãœãªã¥ãŒã·ã§ã³ãæ¹åããããã«ããŸãã¯æ¢åã®ãœãªã¥ãŒã·ã§ã³ãããåªããæ°ãããœãªã¥ãŒã·ã§ã³ãäœæããããã«ãªãã€ã¬ã¯ãã§ããŸããïŒ
ïŒ1236ãéããã®ãšåãããã«ãããéããŸãã Angular 2ã¯ãææ°ã®ãã©ãŠã¶ãŒããµããŒãããããã«æ§ç¯ãããŠããããã®ãã¡ã€ã«ã䜿çšãããšãç°¡åã«ãµããŒããå©çšã§ããããã«ãªããŸãã
èŠçŽ ã«çŽæ¥ã¢ã¯ã»ã¹ããŠãã¡ã€ã«æ å ±ãååŸããAJAJçµç±ã§ã¢ããããŒãã§ããããã«ãå€æŽã€ãã³ãããã€çºçããããç¥ãããã ãã§ãã
@bjoshuanoahã§ã¯ãäœã®ããã«ngModelãå¿ èŠã§ããïŒ ã€ãã³ããªã¹ããŒãå ¥å= pã«ãã€ã³ãããã ãã§ã
@caitpãã£ã¬ã¯ãã£ãã§ã¯ãªããã³ã³ãããŒã©ãŒå ã®ãã¹ãŠãå¶åŸ¡ãããã
ng-change = "uploadFileïŒ{$ eventïŒ$ event}ïŒ"ã眮ããš
ã³ã³ãããŒã©ã«$ scope.uploadFileïŒeventïŒãå«ããããšãã§ããŸãã ããã§åŠçããŸãã
ç§ã®å ·äœçãªäœ¿çšäŸã¯æ¬¡ã®ãšããã§ãããã¡ã€ã«ãs3ã«ã¢ããããŒãããURLãã¢ãã«ã«é©çšããŸãã
代ããã«ãåãããšãããããã«ã¹ã³ãŒãã«äŸµå ¥ããå¿ èŠããããŸãã ãšãŠãããããïŒ
<input name="highRes" scope="{{contentOptions.currentValue}}" key="value" type="file" onchange="angular.element(this).scope().setFile(this)">
ç§ã¯èª°ãããã®åé¡ã殺ããŠãããããšãæã¿ãŸãã ã ããç§ãã¡ã¯çå ã«é²ãããšãã§ããŸã:)
2014幎7æ25æ¥ã«ã¯ãåå9æ22åAMã§ããã©ã€ã¢ã³< [email protected] [email protected] >æžããŸããïŒ
èŠçŽ ã«çŽæ¥ã¢ã¯ã»ã¹ããŠãã¡ã€ã«æ å ±ãååŸããAJAJçµç±ã§ã¢ããããŒãã§ããããã«ãå€æŽã€ãã³ãããã€çºçããããç¥ãããã ãã§ãã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGi tHubhttpsïŒ//github.com/angular/angular.js/issues/1375#issuecomment-50171714ã§è¡šç€ºããŠãã ããã
+1
+1
+1000000000000000
+1
+1
+1
+1
+100500
+1
Ajaxãåé¡ã«ãªãçç±ãããããŸããã ããŒã«ã«ãã·ã³ã®csvãã¡ã€ã«ããAngularã¢ãã«ã«ããŒã¿ãããŒããããå ŽåããããŸãã ng-changeãAngularå
ã®ãã¡ã€ã«å
¥åã§æ©èœããå Žåãããã¯ç°¡åã§ãããçŸåšã¯ããã§ã¯ãããŸããã ãã®ã·ããªãªã§ã¯ãAjaxããµãŒããŒAPIã¯ãŸã£ããå¿
èŠãããŸããã ãªããããééãããŠããã®ããããããŸãããïŒ
ç§ã®çŸåšã®åé¿çã¯ã次ã®ããšãè¡ãããšã§ã
input(type="file", onchange="angular.element(this).scope().onFileSet(this.files)")
ç§ã®ã³ã³ãããŒã©ãŒã«ã¯æ¬¡ã®ãããªãã®ããããŸã
$scope.onFileSet = function(files) {
// work your magic here
}
ããªãæªèãæŸã¡ãŸãããç§ã¯ããŒã«ãšããŠAngularãããã§ãªãã«ããŠãããããªæ°ãããŸãã ããè§åºŠã®ããæ¹æ³ã§ãããè¡ãæ¹æ³ã«ã€ããŠã®æŽå¯ã¯éåžžã«é«ãè©äŸ¡ãããŸãã
ïŒheart ïŒïŒ heartïŒ
ããããšããã§ã:: sailboatïŒ
@samcconeãããã°ã¢ãŒãããªãã«ãªã£ãŠããå ŽåãscopeïŒïŒã¯äœ¿çšã§ããŸãããïŒ
@geetsceãã®éãã§ãïŒ1.3.x以éïŒ
ãŠã§ã«ãã1.2ã®åå°ã§ã¯ãã¹ãŠãé 調ã§ãã
@Narretzããè¯ã解決çã¯ãããŸããïŒ
ããã¯ç§ã«ãšã£ãŠã¯ããŸããããŸããããã¯ãŸã
<input type="file" multiple="multiple" data-dbinf-on-files-selected="chooseAFunctionName(selectedFileList)">
<script>
/**Directive to propagate selected files from an HTML input element with type="file"
* to the surrounding AngularJS controller.
*/
myApp.directive('dbinfOnFilesSelected', [function() {
return {
restrict: 'A',
scope: {
//attribute data-dbinf-on-files-selected (normalized to dbinfOnFilesSelected) identifies the action
//to take when file(s) are selected. The '&' says to execute the expression for attribute
//data-dbinf-on-files-selected in the context of the parent scope. Note though that this '&'
//concerns visibility of the properties and functions of the parent scope, it does not
//fire the parent scope's $digest (dirty checking): use $scope.$apply() to update views
//(calling scope.$apply() here in the directive had no visible effect for me).
dbinfOnFilesSelected: '&'
},
link: function(scope, element, attr, ctrl) {
element.bind("change", function()
{ //match the selected files to the name 'selectedFileList', and
//execute the code in the data-dbinf-on-files-selected attribute
scope.dbinfOnFilesSelected({selectedFileList : element[0].files});
});
}
}
}]);
myApp.controller('myController', ['$scope', function($scope) {
$scope.chooseAFunctionName = function (filelist) {
for (var i = 0; i < filelist.length; ++i) {
var file = filelist.item(i);
//do something with file; remember to call $scope.$apply() to trigger $digest (dirty checking)
alert(file.name);
}
};
}]);
</script>
+1
+1
ããã¯èµ·ãããŸãã...ãããææŸãããããææŸã...
+1
@samcconeãèšã£ãããã«ã
input(type="file", onchange="angular.element(this).scope().onFileSet(this.files)")
ããã¯ç©äºãè¡ãããã®è§åºŠã®ããæ¹æ³ã§ã¯ãããŸããã ããã¯å¥åŠã§ãã
+1
+1
+1
ãã@ caitp @ Narretzããªããã¡ãç§ã1.2xãã©ã³ãã®ããã«ããã®ããã«PRãäœãããšãã§ããããšãæããªãããããããªããè¿œå ããããã®ã§ãããã©ããç§ã«ç¥ãããŠãã ããã å®éã®ãã¡ã€ã«ãªããžã§ã¯ãã«ã¢ã¯ã»ã¹ããéããã»ãã¥ãªãã£äžã®æžå¿µãšã¯ãã¹ãã©ãŠã¶ãµããŒãã®æ¬ åŠãç解ããŠããŸããããã¡ã€ã«å ¥åãå€æŽããããšãïŒå ã®ã€ãã³ããæž¡ãïŒãæ€åºããããã®åºæ¬çãªãµããŒãã¯ååãªããã¯ãæäŸããããã§ã人ã ãéæ³ãåãããããã«ã
ãã€ãããããšãããããŸãïŒpalm_treeïŒ
+1
+1
+1
+1
+1
@neokyolã®+1 !! ããã¯ããŸããããŸãïŒ
ãã®å ±éæ©èœã¯ãããã©ã«ãã§ãã¬ãŒã ã¯ãŒã¯ã«å«ãŸããŠããå¿ èŠããããŸã
圹ã«ç«ã£ã
+1
+1
+1
+1
+1
ããã¯ç§ã®ããã«åãããå©ãã«ãªããããããªã
angular.module('app', [])
.controller('MainCtrl', MainCtrl)
.directive('fileChange', fileChange);
function MainCtrl($scope) {
$scope.upload = function () {
// do something with the file
alert($scope.file.name);
};
}
function fileChange() {
return {
restrict: 'A',
require: 'ngModel',
scope: {
fileChange: '&'
},
link: function link(scope, element, attrs, ctrl) {
element.on('change', onChange);
scope.$on('destroy', function () {
element.off('change', onChange);
});
function onChange() {
ctrl.$setViewValue(element[0].files[0]);
scope.fileChange();
}
}
};
}
<div ng-app="app" ng-controller="MainCtrl">
<input type="file" file-change="upload()" ng-model="file">
</div>
+1
+1
+1
+1
+1000000000000000000000000
+1
+1
@dciccaleãã©ã³ã«ãŒã®äŸãæããŠãã ããã
@ santhosh77h http://plnkr.co/edit/JYX3Pcq18gH3ol5XSizw?p=preview
+1
+1
+1ãã®ããã«ã³ã¢ã©ã€ãã©ãªã«ãã£ã¬ã¯ãã£ããçµã¿èŸŒãŸããŠããå¿ èŠããããŸãã ãã®ããªãã°ãããŠãã
+1
+1
ãã®æ©èœã¯æ¬¡ã®ãªãªãŒã¹ã®ããããã«äºå®ãããŠããŸããïŒ
+1
+1
$ scopeãã³ã³ãããŒã©ãŒã«æ³šå ¥ãããªããããžã§ã¯ãã§ãããè¡ãæ¹æ³ã ã³ã³ãããŒã©ãŒã宣èšããããã«GULPãšES6ã®æ¹æ³ã䜿çšããlaravelangularã䜿çšããŠããŸãã
NS
class TestController{
constructor(API){
'ngInject';
this.API = API
}
$onInit(){
this.file = null;
}
upload() {
console.log(this.file)
}
fileChanged(elm) {
console.log('hey')
this.file = elm.file;
this.$apply();
}
}
export const TestComponent = {
templateUrl: './views/app/components/test/test.component.html',
controller: TestController,
controllerAs: 'vm',
bindings: {}
}
ç§ã¯èªåãä¿¡ããŠããåé¿çãèŠã€ããŸããã http://stackoverflow.com/questions/38449126/how-to-set-up-ng-file-upload-in-laravel-angular-project/38486379#38486379
+1
@ntrp @guruward @coli @lgersman @jgoldber @Siyfion
ã®æ€èšŒãã©ã®ããã«ä¿®æ£ããŸããã
ç§ã®æ€èšŒïŒ
this.catalougeForm = this.catalougeFormBuilder.groupïŒ{
catalougeIconNameïŒ[''ãValidators.required]
}ïŒ;
HTMLïŒ
ïŒchangeïŒ= "changeListenerïŒ$ eventïŒ">
ç§ã®ããªããŒã¿ãŒã¯ãã¢ããããŒãåŸã«catalougeIconNameå€ã空/ nullãšèŠãªããŠããŸãã
ç»åã¯éä¿¡ãããŠããŸãããããªããŒã¿ãŒãæ©èœããŠããŸãã
ããã«é¢ããæŽæ°ã¯ãããŸããïŒ
æŽæ°ã¯ãããŸããïŒ
æãåèã«ãªãã³ã¡ã³ã
ãã®ãœãªã¥ãŒã·ã§ã³ã¯ãå®è£ ãããŠãããã¡ã€ã«ãªãŒããŒã«ãã£ãŠç°ãªããŸãã
次ã«ãxhrã®åŠçãèªåã§è¡ãå¿ èŠããããŸãããããã¯GUIãã€ã³ãã£ã³ã°ããã³ããå€ãã®åŠçããžãã¯ã®ç¯å²å€ã§ãããšæããŸãã
ãããŠããªããæ³ååãæ¬ ããŠãããªãïŒ
ããã¯xhr2ïŒhttp://www.html5rocks.com/en/tutorials/file/xhr2ïŒã®ããã«æ©èœããŸããé·ãäŸã®ã¢ããããŒãURLããã®couchdbããã¥ã¡ã³ããšã³ããã€ã³ãïŒæ·»ä»ãã¡ã€ã«ïŒãèš±ããŠãã ããã