【问题标题】:Creating AngularJS directive with Plupload使用 Plupload 创建 AngularJS 指令
【发布时间】:2012-06-30 20:14:59
【问题描述】:

我正在开发一个可以上传文件的应用。我想创建一个可重用的文件上传组件,它可以包含在任何需要文件上传功能的页面上。我原本以为我可以只使用 JSP 标记。然而,我们最近发现了 AngularJS,现在想在整个应用程序中使用它。所以,我想创建一个指令,让我可以简单地放置一个 <myApp-upload> 标签来粘贴我的上传功能。

我首先将我的上传功能设置为自己的 HTML 页面,以确保 AngularJS 与 Plupload 插件很好地配合使用。我把这样的东西放在一起:

<html ng-app="myApp">
<head>
    <script src="resources/scripts/angular-1.0.1.min.js"></script>
    <script src="resources/scripts/myApp.js"></script>
</head>
<body>
   <style type="text/css">@import url(resources/scripts/plupload/jquery.plupload.queue/css/jquery.plupload.queue.css);</style>
   <script type="text/javascript" src="resources/scripts/jquery-1.7.2.min.js"></script>

   <script type="text/javascript" src="resources/scripts/plupload/plupload.full.js"></script>
   <script type="text/javascript" src="resources/scripts/plupload/jquery.plupload.queue/jquery.plupload.queue.js"></script>

   <div id="uploadContainer" ng-controller="FileUploadCtrl">
        <div id="dropArea" style="border: 1px black dashed;">Drag files to here<br><br><br></div>
        Files to upload:<br>
        <div ng-repeat="currFile in uploader.files">{{currFile.name}} ({{currFile.size}})</div>
        <br><br>
       <!-- For debugging -->
       {{uploader.files}}
    </div>
</body>
</html>

myApp.js 如下所示:

function FileUploadCtrl($scope)
{
    $scope.uploader = new plupload.Uploader({
        runtimes : 'html5,flash,html4',
        url : 'media/upload',
        max_file_size : '10mb',
        container: 'uploadContainer',
        drop_element: 'dropArea'
    });

    $scope.uploader.init();

    $scope.uploader.bind('FilesAdded', function(up, files) {
        $scope.$apply();
    }); 
}

当我将文件拖入时,我看到文件名出现并且 {{uploader.files}} 的输出从 [] 更改为上传器对象中的文件。所以,现在我想把它变成一个指令。我将 body 标记中的所有内容保存到一个名为 upload.html 的文件中。然后我将以下内容添加到 myApp.js:

angular.module('myApp', [])
.directive('myAppUpload', function () {
    return {
        restrict: 'E',
        templateUrl: 'upload.html',
    };
});

然后,我有一个这样的 HTML 文件:

<html ng-app="myApp">
<head>
    <script src="resources/scripts/angular-1.0.1.min.js"></script>
    <script src="resources/scripts/myApp.js"></script>
</head>
<body>
    <myApp-upload>
       This will be replaced
    </myApp-upload>
</body>
</html>

当我加载这个 HTML 页面时,&lt;myApp-upload&gt; 标签确实会引入 upload.html 文件。但是,它不执行任何数据绑定。在底部,我看到的是{{uploader.files}},而不是我最初看到的[],当它是它自己的页面时。

我对 AngularJS 很陌生,所以我确定我只是遗漏了一些东西,或者做错了什么。如何让这个指令生效?

【问题讨论】:

  • 请务必查看fiddles list 以获取某人制作的drag and drop upload example。
  • 好吧,当所有功能都是它自己的 html 页面时,拖放就可以正常工作。我只是想知道我在使指令不起作用的指令上做错了什么。

标签: plupload angularjs


【解决方案1】:

我发现了我的问题。我在我的模板 HTML 页面上包含了所有的 javascript 和 CSS。我尝试将它移动到主 HTML 文件,然后它工作了。换句话说,我搬家了

<style type="text/css">@import url(resources/scripts/plupload/jquery.plupload.queue/css/jquery.plupload.queue.css);</style>
<script type="text/javascript" src="resources/scripts/jquery-1.7.2.min.js"></script>

<script type="text/javascript" src="resources/scripts/plupload/plupload.full.js"></script>
<script type="text/javascript" src="resources/scripts/plupload/jquery.plupload.queue/jquery.plupload.queue.js"></script>

从upload.html 文件到主index.html 文件。

尝试调用脚本中的一些 Plupload 内容时,javascript 正在死去,但脚本还没有机会被包含在内。

【讨论】:

    【解决方案2】:

    我们刚刚为 plUpload 创建了一个 Angular 指令。在这里检查。

    http://plupload-angular-directive.sahusoft.info/

    【讨论】:

    • 我在我的项目中使用了这个指令,但它在 IE 9 中失败,它返回 json 以在浏览器中下载第一次下载,从下一次开始它就不起作用了。请帮忙。
    • 它应该可以在 IE9 上运行,我没有在 IE9 上测试的环境。如果这不起作用,那么您应该尝试使用blueimp.github.io/jQuery-File-Upload/angularjs.html
    • 未提供适当的文档。
    • 那个链接有文档。
    猜你喜欢
    • 2013-12-25
    • 2014-02-14
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 2012-12-16
    相关资源
    最近更新 更多