Javascript AngularJS中的纯函数控制器
是否可以仅使用纯函数在AngularJS中编写控制器?我不知道该把状态保存在哪里,以及如何以一种纯粹的功能性方式操纵它 我正在使用Angular主页上的todo应用程序。我所能做的最好的事情就是分离出纯部分,并在控制器方法中调用它们Javascript AngularJS中的纯函数控制器,javascript,angularjs,functional-programming,Javascript,Angularjs,Functional Programming,是否可以仅使用纯函数在AngularJS中编写控制器?我不知道该把状态保存在哪里,以及如何以一种纯粹的功能性方式操纵它 我正在使用Angular主页上的todo应用程序。我所能做的最好的事情就是分离出纯部分,并在控制器方法中调用它们 var _remaining = R.compose(R.length, R.filter(R.prop('done'))); var _archive = R.filter(R.compose(R.not, R.prop('done'))); class Tod
var _remaining = R.compose(R.length, R.filter(R.prop('done')));
var _archive = R.filter(R.compose(R.not, R.prop('done')));
class TodoListCtrl {
constructor() {
this.todos = [
{text: 'learn angular', done: true},
{text: 'build an angular app', done: false}];
this.todoText = '';
}
remaining() {
return _remaining(this.todos);
}
archive() {
this.todos = _archive(this.todos);
}
}
注:我正在做一项可行性研究,以了解是否有可能在AngularJS中使用纯功能性技术。答案似乎很晚。尽管如此,我仍然会尝试。对于Angular 1,控制器作为100%纯函数是不可能的,因为
controller
旨在增强$scope
(即使使用controllerAs
语法),而这$scope
是MVVM模式的关键。角度视图是这个$scope
的副作用
你可以抽象到某种程度,但仅此而已。仅此而已。在angular中,状态应保持在$scope或angular服务中。我正在使用建议的
controllerAs
语法。我的头撞到了同一个问题上,我开始读这本书:也许答案就在那里。。2年过去了,我们似乎一直在为此而头痛。2015年的一篇文章非常好:也是使用RxJs的另一种方法(angular2附带):