2

我在很多项目中都使用 angular,特别是在 ASP.NET MVC 中,但我不喜欢 angular-

  • 路由器(也是 ui-router,这确实不是什么大问题,因为它只是一个插件) - Web 应用程序的概念会扼杀所有 ASP.NET 功能
  • 服务和工厂——因为所有这些都可以在通用控制器中完成。(这听起来可能很棘手)
  • 常量和值 - 因为如果您使用 requirejs 或其他 AMD,我认为这不是真正需要的

我在角度中喜欢的只是指令,当我制作大的嵌套指令时,我使用相同的控制器 foreach,所以没有$scope交互(更少的观察者)

.controller('BaseGridCtrl', function(){
   //instead of 
   //$scope.value = 123;

   var ctrl = this;
   //this  is for Table-base-directive
   ctrl.value = 123;
   //this  is for Table-head-directive
   ctrl.value2 = 123;
});
.directive('table-base', function(){
    return {
        template: '<div>{{bgc.value}}</div>',
        controller: 'BaseGridCtrl',
        controllerAs: 'bgc'
    }
});
.directive('table-head', function(){
    return {
        template: '<div>{{bgc.value2}}</div>',
        controller: 'BaseGridCtrl',
        controllerAs: 'bgc'
    }
});
.directive('table-foot', function(){
    return {
        template: '<div>{{bgc.value3}}</div>',
        controllerAs: 'bgc',
        controller: function(){
           var ctrl = this;
           ctrl.value3 = 123;
        }
    }
});

所以链接功能很少使用。特别是我喜欢这个角度很容易检测指令 - 这很棒,因为你只需编写 1 个标签<grid>而不是 reactjs 组件(这听起来也很棘手)。在我的项目中,我将DotLiquid用于剃刀视图(它作为字符串存储在数据库中)示例:

<grid theme="some" route="localhost:9000/some/action"></grid>

所以 dotLiquid 只是渲染这个字符串而没有问题,或者甚至在 angularjs 之外应用其他 bingings。这很棒,因为所有东西都是独立的。这无法通过 reactjs 实现 - 您需要自己引导组件

React.renderComponent(<Grid />, document.querySelector('#someId'))

恢复

目前它很重,大约 100kb,但如果没有所有这些不必要的东西,它会很轻。我想只使用directivecontroller服务,还有服务器端渲染角度会在每个请求上引导自己,这是不明智的,但使用更轻的版本有点权衡。有没有人试图成功地剥离角度服务?或者有什么考虑,有什么想法吗?

编辑

Angular-light看起来很有希望,但是:

  • 它不提供 HTML 标签检测,只提供属性
  • 真的很丑,alight.directives.al.getValue这只对我或其他人来说看起来很糟糕?

编辑2

好的,那 100kb 可能不会播放很多。但是将其视为锻炼,您可能知道,角度仅在页面加载时启动一次,因此它必须构建应用程序,拉取所有模块,配置每个模块,然后配置模块的所有服务,然后将它们注入需要的地方,然后提供从工厂和服务回调到任何注入它们的人,至少它会检查是否存在(在每个模块上),所有这些都在开始时发生,只发生一次!通过擦除大小,我们还可以最小化 javascript 执行(确实会)、工厂和服务观察者,因此我们不需要任何未使用的部分。我们甚至可以摆脱控制器(并内联使用它们),只需一项服务。angular.directive(这是聚会的最佳部分)。看过胡子,车把,但它们就像 reactjs。

4

2 回答 2

5

你可以试试Angular Light ~15kb (gzipped),它没有服务、工厂、常量、值、DI、路由器等。

此外,它还具有有用的功能,例如文本指令和对 Object.observe ( benchmark )的支持

编辑

它提供 HTML 标签检测、属性和注释。

于 2015-03-02T07:37:53.987 回答
1

AngularJS 适用于完整的 SPA 开发。这意味着您不会一直往返于服务器。如果您的应用程序需要来回传递数据,请利用 WEB API 控制器并将 JSON 传递给它们。

我目前正在开发的资产管理系统是完整的 SPA,其中 WEB API 和 MVC 完全符合其需求。用户登录是在整个页面请求中处理的,其他一切都是 SPA。此外,这里有更多关于一起使用MVC/WebAPI 和 Angular的内容。

如果您尝试使用 AngularJS 而不是BackboneJS之类的东西,那么您应该使用为此目的而启动的AngularJS Light 。我没有专门使用这个库,但因为它被认为是我使用的库的替代品。建议,如果您想要 Angular 而不是BackboneJSKnockoutJS ,请使用AngularJS Light

于 2015-03-02T10:20:34.113 回答