2

我在 Umbraco 7.0.3 的自定义属性编辑器中使用角度文件上传。我正在关注本教程以创建编辑器。

我对 Angular 很陌生,所以我的问题对你们中的一些人来说可能微不足道:我无法尽快解决对控制器中文件上传服务的依赖关系。我的 HTML 模板如下所示:

<div ng-controller="MyCustomController">
    <input type="file" ng-file-select="onFileSelect($files)" multiple>
</div>

控制器函数需要 $upload 服务作为参数,但是我在函数的开头注入了该服务:

angular.module("umbraco")
    .controller("MyCustomController", function ($scope, assetService, $upload) {

    assetsService
        .load([
            "/App_Plugins/MyCustomPlugin/angular-file-upload.min.js",
        ])
        .then(function () {
            alert('upload service loaded');
        });

    $scope.onFileSelect = function ($files) {
        alert('file selected');
    }
});

所以,这种方式肯定是不对的。我试图在控制器初始化之前加载上传服务,但是它是异步加载的,因此无论如何都无法在控制器之前定义该服务。

如何仅在加载上传服务后声明我的控制器函数,或者如何获取对服务的引用而不是参数?

谢谢,

编辑

到目前为止,我发现的唯一解决方案是将实际的文件上传代码库包含到自定义属性编辑器的控制器中。为了简单起见,我将这篇论文作为我自己的代码库的起点。但是,在这种情况下,我仍在寻找加载外部模块的“正确”方式。

4

1 回答 1

0

而是将您的代码作为服务包含在内。

如果您看到它的文档页面,代码 angular.module 行可以采用额外的参数。在这里,您应该考虑包含任何第三方库。例如,我使用 ngTable - 一个围绕 jQuery 可排序和可过滤表插件的 AngularJS 包装器。为了包含它的使用,我必须将它作为服务添加到当前应用程序的模块中,如下所示:

var app = angular.module("umbraco", ['ngTable']);

然后我必须记住要做的就是引用脚本,并且我可以使用代码,就好像我已经包含了代码本身的主体一样。因此,我假设您会引用您的服务 JS 文件,并编写代码来引用该服务,如下所示:

angular.module("umbraco", "MyCustomController");

但是,我会将代码重命名为服务而不是控制器。

对于 AngularJS 来说,这是一个陡峭的学习曲线,即使你经常使用它,也有很多常见的陷阱。我希望这能解释得更多。

于 2015-05-24T02:31:04.790 回答