Я знаю, что этот вопрос задавали раньше, но мой вопрос касается использования методов abp.services
в JavaScript напрямую.
Предположим, что у меня есть:
public interface ISecurityAppService : IApplicationService
{
List<PacsUser_C_Extented> GetAll();
}
public class SecurityAppService : ApplicationService, ISecurityAppService
{
public List<PacsUser_C_Extented> GetAll()
{
// ...
return allUsers;
}
}
Все типовые услуги будут хорошо оформлены:
public class Global : AbpWebApplication<ImmenseWebModule>
{
protected override void Application_Start(object sender, EventArgs e)
{
base.Application_Start(sender, e);
}
}
Как сказано в документации ASP.NET Boilerplate
, чтобы иметь возможность использовать автоматически созданные службы, вы должны включить необходимые скрипты на свою страницу, например:
<script src="~/Abp/Framework/scripts/libs/angularjs/abp.ng.js"></script>
<script src="~/api/AbpServiceProxies/GetAll?type=angular"></script>
Я знаю, что во второй строке используется angular
контроллер, но я меняю его на:
<script src="~/api/AbpServiceProxies/GetAll?v=@(Clock.Now.Ticks)">script>
... все еще ничего не работает.
Когда я хочу использовать getAll
в JavaScript-коде ASP.NET, он дает мне:
abp.service не определен
Итак, как я могу использовать getAll
или другой метод в SecurityAppService
в элементе <script>...</script>
- не Angular?
Заранее спасибо.
Когда я использую угловой контроллер и частичный вид MVC, например:
(function () {
var app = angular.module('app');
var controllerId = 'sts.views.security.list';
app.controller(controllerId, [
'$scope', 'abp.services.remotesystem.security',
function ($scope, securityService) {
var vm = this;
vm.localize = abp.localization.getSource('ImmenseSystem');
vm.users = [];
vm.refreshUserList = function () {
abp.ui.setBusy( // Set whole page busy until getTasks completes
null,
securityService.getAll().success(function (data) {
vm.users = data;
abp.notify.info(vm.localize('UserListLoaded'));
})
);
};
vm.refreshUserList();
}
]);
})();
Я могу использовать эту функцию. Но я хочу использовать это в JavaScript на страницах веб-формы ASP.NET.
Наконец, я решил это простым способом, как следующие шаги...
1- Запустите проект и используйте эти сервисы с помощью углового и частичного просмотра (MVC), например, в разделе "Обновление".
2- После запуска и перенаправления на представление я перешел на View page source
и просмотрел сценарии зависимостей.
3- Я скопировал приведенный ниже источник сценариев на страницу:
<script src="Scripts/jquery-2.2.0.min.js"></script>
<script src="Scripts/jquery-ui-1.11.4.min.js"></script>
<script src="Scripts/jquery.validate.min.js"></script>
<script src="Scripts/modernizr-2.8.3.js"></script>
<script src="Abp/Framework/scripts/utils/ie10fix.js"></script>
<script src="Scripts/json2.min.js"></script>
<script src="Scripts/bootstrap.min.js"></script>
<script src="Scripts/moment-with-locales.min.js"></script>
<script src="Scripts/jquery.blockUI.js"></script>
<script src="Scripts/toastr.min.js"></script>
<script src="Scripts/sweetalert/sweet-alert.min.js"></script>
<script src="Scripts/others/spinjs/spin.js"></script>
<script src="Scripts/others/spinjs/jquery.spin.js"></script>
<script src="Scripts/angular.min.js"></script>
<script src="Scripts/angular-animate.min.js"></script>
<script src="Scripts/angular-sanitize.min.js"></script>
<script src="Scripts/angular-ui-router.min.js"></script>
<script src="Scripts/angular-ui/ui-bootstrap.min.js"></script>
<script src="Scripts/angular-ui/ui-bootstrap-tpls.min.js"></script>
<script src="Scripts/angular-ui/ui-utils.min.js"></script>
<script src="Abp/Framework/scripts/abp.js"></script>
<script src="Abp/Framework/scripts/libs/abp.jquery.js"></script>
<script src="Abp/Framework/scripts/libs/abp.toastr.js"></script>
<script src="Abp/Framework/scripts/libs/abp.blockUI.js"></script>
<script src="Abp/Framework/scripts/libs/abp.spin.js"></script>
<script src="Abp/Framework/scripts/libs/abp.sweet-alert.js"></script>
<script src="Abp/Framework/scripts/libs/angularjs/abp.ng.js"></script>
<script src="Scripts/jquery.signalR-2.2.1.min.js"></script>
<script src="api/AbpServiceProxies/GetAll?v=636475780135774228"></script>
<script src="api/AbpServiceProxies/GetAll?type=angular&v=636475780135774228"></script>
<script src="AbpScripts/GetScripts?v=636475780135774228" type="text/javascript"></script>
и используйте метод getAll
:
<script>
var securityService = abp.services.remotesystem.security;
securityService.getAll().done(function (data) {
for (var i in data)
console.log(data[i].username);
});
</script>
Я думаю, что важным персоналом для использования автогенерируемых сервисов является:
<script src="api/AbpServiceProxies/GetAll?v=636475780135774228"></script>
<script src="api/AbpServiceProxies/GetAll?type=angular&v=636475780135774228"></script>
<script src="AbpScripts/GetScripts?v=636475780135774228" type="text/javascript"></script>
Спасибо за внимание.
<script src="api/AbpServiceProxies/GetAll?v=636475780135774228"></script>
кажется обязательным. Но вы говорите, что это не работает и нет ошибок.
AssetApplicationService должен быть реализован службой IApplicationService, а затем правильно проверить загрузку вашего модуля и добавить правильные зависимости в другие модули, подобные этому.
Проверьте эту ссылку. Это сработало для меня.
вы вводите abp.services.remotesystem.security. поэтому вы можете использовать это пространство имен для доступа к функциям. откройте консоль хром и напишите abp.services.remotesystem.security, вы увидите функции
abp.service is not defined
→ Вы забылиs
вabp.services
?s
были пропущены, я попробовалabp.services