Редактор пользовательских свойств Umbraco 7 с использованием угловой загрузки файла

Я использую угловую загрузку файлов в редакторе пользовательских свойств для Umbraco 7.0.3. Я следую этому руководству, чтобы создать редактор.

Я совершенно новичок в angular, поэтому мой вопрос может быть тривиальным для некоторых из вас: я не могу достаточно быстро разрешить зависимость от службы загрузки файлов в моем контроллере. Мой HTML-шаблон выглядит так:

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

Для функции контроллера в качестве аргумента потребуется $upload service, однако я добавляю этот сервис в начале функции:

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');
    }
});

Так что это определенно не так. Я пытался загрузить службу загрузки перед инициализацией контроллера, однако он загружается асинхронно, поэтому служба все равно не может быть определена до контроллера.

Как я могу объявить свою функцию контроллера только после загрузки службы загрузки, или как я могу получить ссылку на службу, отличную от аргумента?

Спасибо,

РЕДАКТИРОВАТЬ

Единственное решение, которое я нашел до сих пор, заключалось в том, чтобы включить фактическую базу кодов загрузки файлов в контроллер редактора пользовательских свойств. Я использовал эту статью в качестве отправной точки для моей собственной кодовой базы для ее простоты. Однако я все еще ищу "правильный" способ загрузки внешнего модуля в этом случае.

1 ответ

Вместо этого включите ваш код в качестве службы.

Строка кода angular.module может принимать дополнительные параметры, если вы видите ее страницу документации. Именно здесь вы должны включить любые сторонние библиотеки. Например, я использую ngTable - оболочку AngularJS вокруг сортируемого и фильтруемого плагина таблицы jQuery. Чтобы включить его использование, я должен добавить его в качестве службы в модуль текущего приложения следующим образом:

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

Все, что мне потом нужно помнить, это ссылаться на сценарии, и я могу использовать код, как если бы я включил тело самого кода. Поэтому я предполагаю, что вы будете ссылаться на JS-файлы вашего сервиса и напишите свой код для ссылки на сервис следующим образом:

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

Однако я бы переименовал код как сервис, а не как контроллер.

Это крутая кривая обучения для AngularJS, и даже если вы часто ее используете, есть много распространенных ошибок. Я надеюсь, что это объясняет это немного больше.

Другие вопросы по тегам