pluploadのディレクティブを作成しようとしています。一度に1ステップずつ実行するために、最初に、ディレクティブ(controllerおよびstd html)を使用せずにファイルのアップロードを機能させました。次に、ディレクティブを追加して、htmlを正しくレンダリングできるようにしました。残念ながら、pluploadバインディングはその後壊れました。
一見すると、pluploadがバインドを行う前にディレクティブがレンダリングされていないように見えますが、コード内にログステートメントを追加すると、ディレクティブはハッシュを返し、すべてのhtml要素がDOM内に存在するように見えます。
これを機能させる方法について何かアイデアはありますか?
html
<div ng-controller="ProfilePhotoUploader">
This does not work
<uploader url="<%= profile_image_uploader_path %>"></uploader>
This works
<div id="profile-image-container">
<div id="select-file">Select File</div>
<div id="drop-area">Drop file here</div>
<button class="button small" ng-click="upload('<%= profile_image_uploader_path %>')">Upload File</button>
</div>
</div>
uploader.js
var uploader = angular.module('uploader', []);
uploader.directive('uploader', function () {
alert("in directive");
return {
restrict: 'E',
scope: {
url:'@'
},
templateUrl: "/assets/uploader.html"
}
});
Assets / uploader.html
<div id="profile-image-container">
<div id="select-file">Select File</div>
<div id="drop-area">Drop file here</div>
<button class="button small" ng-click="upload('{{url}}')">Upload File</button>
</div>
profile_photo_uploader.js
var ProfilePhotoUploader = function ($scope) {
console.log($("uploader"));
$scope.uploader = new plupload.Uploader({
runtimes: "html5",
browse_button: 'select-file',
max_file_size: '10mb',
container: "profile-image-container",
drop_element: "drop-area",
multipart: true,
multipart_params : {
authenticity_token: $('meta[name="csrf-token"]').attr('content'),
_method: 'PUT'
},
filters: [
{title: "Image Files", extensions: "jpg,jpeg,png"}
]
});
$scope.upload = function(url) {
$scope.uploader.settings.url = url;
$scope.uploader.start();
};
$scope.uploader.init();
};