我在许多项目中使用angular,特别是在ASP.NET MVC中,但我不喜欢angular -
我喜欢的角度只是指令,当我制作大型嵌套指令时,我使用相同的控制器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;
}
}
});
因此链接功能很少使用。特别是我喜欢angular很容易检测到指令 - 这很好,因为你只需要编写1个标签<grid>
而不是reactjs组件(这也可能听起来很棘手)。在我的项目中,我使用DotLiquid获取剃刀视图(它以数据库形式存储在数据库中)示例:
<grid theme="some" route="localhost:9000/some/action"></grid>
所以dotLiquid只是渲染这个字符串没有问题,甚至在angularjs旁边应用其他的bingings。这很棒,因为所有东西都是自包含的。这是reactjs无法实现的 - 您需要自己引导组件
React.renderComponent(<Grid />, document.querySelector('#someId'))
目前它很重,大约100kb,但没有所有这些不必要的东西,它会非常轻。我只想使用directive
和controller
服务,同时服务器端渲染角度会在每个请求上自行引导,这是不明智的,但是对于较轻的版本,它有点权衡。
有没有人试图成功剥离角度服务?或者是否有任何考虑,任何想法?
Angular-light看起来很有希望,但是:
alight.directives.al.getValue
这对我或其他人来说看起来很糟糕?好的,100kb可能不会播放很多。但是可以把它视为锻炼,你可能知道,在页面加载时只角度启动一次,所以它必须构建应用程序,拉动所有模块,配置每个模块,然后是模块的所有服务,然后将它们注入需要的地方,然后供应从工厂和服务到任何注入它们的人的回调,至少它会检查是否存在(在每个模块上),所有这一切都在开始时发生,只有一次!通过擦除大小,我们还可以最小化javascript执行(实际上它会),工厂和服务观察者,因此我们不需要任何未使用的部分。我们甚至可以摆脱控制器(并使用它们内联),只有1项服务。 angular.directive
(这是派对的最佳部分)。看过胡子,车把,但它们就像反应一样。
答案 0 :(得分:5)
您可以尝试Angular Light ~15kb(gzipped),它没有服务,工厂,常量,值,DI,路由器等。
此外,它还有一些有用的功能,如文本指令和Object.observe支持(benchmark)
修改强>
它提供HTML标记检测,属性和注释。
答案 1 :(得分:1)
AngularJS适用于完整的SPA开发。这意味着您不始终全程往返服务器。如果您的应用程序需要来回传递数据,请使用WEB API控制器并将JSON传递给它们。
我目前正在开发的资产管理系统是完整的SPA,其中包含WEB API和MVC,完全满足其需求。用户登录在整页请求中处理,其他一切都是SPA。此外,还可以阅读更多关于同时使用MVC/WebAPI and Angular的内容。
如果您尝试使用AngularJS而不是BackboneJS之类的内容,那么您应该使用为此目的而启动的AngularJS Light。我没有特别使用这个库,但因为它被认为是我使用的库的替代品。建议,如果您想要Angular而不是BackboneJS或KnockoutJS使用AngularJS Light