Редактор пользовательских свойств 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, и даже если вы часто ее используете, есть много распространенных ошибок. Я надеюсь, что это объясняет это немного больше.