2

我正在使用 AngularJS 和实体框架在 ASP .NET 样板框架上做一个应用程序。

很长时间以来,我一直在学习本教程(http://www.codeproject.com/Articles/791740/Using-AngularJs-ASP-NET-MVC-Web-API-and-EntityFram#ArticleBuildWebApiServices

当它通过 WebApiModule 注册控制器时,它没有显示启动的迹象(我在控制器构造函数上放置了一个断点,它没有响应)。我的目标是让所有产品都带有角度控制器。

这是我的 WebApiModule 代码:

{
    [DependsOn(typeof(AbpWebApiModule))]
    public class ShopWebApiModule : AbpModule
    {
        public override void Initialize()
        {
            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());

            DynamicApiControllerBuilder
                .ForAll<IApplicationService>(Assembly.GetAssembly(typeof(ShopApplicationModule)), "shopsystem")
                .Build();
        }
    }
}

这是我的 IProductAppServiceCode:

{
    public interface IProductAppService:IApplicationService
    {
        GetProductsOutput GetProducts(GetProductsInput input);
        //void UpdateProduct(UpdateProductInput input);
        //void CreateProduct(CreateProductInput input);
    }
}

这是我的 ProductAppServiceCode:

{
    public class ProductAppService : ApplicationService, IProductAppService
    {
        private readonly IProductRepository _productRepository;

        public ProductAppService(IProductRepository productRepository)
        {
            _productRepository = productRepository;
        }

        public GetProductsOutput GetProducts(GetProductsInput input)
        {
            var products = _productRepository.GetKind(input.BookKind);
            return new GetProductsOutput
            {
                Products = Mapper.Map<List<ProductDto>>(products)
            };
        }


    }
}

这是我的 Angular 控制器代码:

(function () {
    var app = angular.module('app');

    var controllerId = 'shop.views.product.list';
    app.controller(controllerId, [
        '$scope', 'abp.services.shopsystem.product',
        function ($scope, productService) {
            var vm = this;


            vm.products = [];

            $scope.productType = 0;
            vm.refreshProducts();
            $scope.$watch('selectedProductType', function (value) {
                vm.refreshTasks();
            });

            vm.refreshProducts = function () {
                abp.ui.setBusy( //Set whole page busy until getTasks complete
                    null,
                    productService.getProducts({ //Call application service method directly from javascript
                    }).success(function (data) {
                        vm.tasks = data.tasks;
                    })
                );
            };

        }
    ]);
})();

我只是这个框架的初学者,如果你能帮助我,我会很高兴。

如果我应该给你带来更多的信息,请说出来。

4

1 回答 1

0

我想念你的一些信息,所以我试着从我看到的开始猜测。

  1. 从 ShopApplicationModule 添加依赖项
  2. 将 web api 公开为“app”,而不是“shopsystem”(除非您已从 Apb 修改了 javascript):
[DependsOn(typeof(AbpWebApiModule), typeof(ShopApplicationModule))]
公共类 ShopWebApiModule : AbpModule {
    公共覆盖无效初始化()
    {
       IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
       Configuration.Modules.AbpWebApi().DynamicApiControllerBuilder
            .ForAll(Assembly.GetAssembly(typeof(ShopApplicationModule)), "app")
            。建造();
        }
    }
  1. javascript: "success(...)" 从 AngularJS 1.4+ 中被弃用。使用 then(....)
  2. javascript:远程方法的错误管理
...
app.controller(controllerId, [
        '$scope', 'abp.services.app.product',
...

变量输入 = {}; // 不确定您的输入 DTO!
abp.ui.setBusy(
    null, //设置整个页面忙
    productService.getProducts(输入)
    。然后(
        函数成功回调(响应){
            vm.tasks = response.data;
        },
        函数错误回调(响应){
           // 你喜欢什么
        }
    )
    .finally(函数(){
         // 你喜欢什么
    })
);
于 2017-10-26T13:26:40.633 回答