我希望有一个在我的大多数页面中重用的简单控制器,特别是sortBy控制器,它允许用户决定按哪个列进行排序,而不是按任何列表视图中的升序或降序排序。 / p>
我想这不会很难。我可以让我的共享模板文件添加一个使用一些sortController的排序div。
但是,我希望保持这种状态,所以如果有人离开我的人员页面访问我的任务页面并稍后返回,则应保留他们在人员页面上的排序顺序选择。维护状态的标准方法是使用服务,就像我们为其他事情所做的那样。但是,我正在尝试尽可能多地重用功能,必须定义六个几乎相同的服务,每个页面一个,感觉很草率。
是否有更简洁的方法来定义单个服务并确保每个页面都使用单独的状态?
我想到的一个选项是使用基本映射的服务,将页面名称或控制器映射到它自己的状态对象。然后,sortController可以调用sortState.get(pageName)(或类似的东西)来获取它想要的特定状态,如果请求页面还不存在,则生成一个新状态。
但是,我不知道这是否是最干净的方法。有没有更好的方法来重用控制器,也许是一些我忘记的角度提供者?
作为一个相关的问题,为我的共享sortController提供一个最干净的方法是什么,它是一个引用它的排序列表以及我想要为给定列表排序的列?
编辑:我正在使用ui-router,因此每个“页面”都是网址的不同基本抽象状态。
答案 0 :(得分:1)
说实话,这听起来像是带控制器的指令的完美之处。假设这些是不同的模板,您可以应用带有name属性的指令以保留状态。
<column-sort-chooser name="myNamedState" list="ctrl.myList" />
有一百万种方法可以存储州,但一个简单的选择就是简单地使用内置的$cacheFactory
var stateCache = $cacheFactory("sortstate:" + attrs.name);
//Get current state or create a new one
var currentState = stateCache.get('sortInfo') || {};
//do some stuff with state making sure to persist for each operation
stateCache.set('sortInfo', currentState);
这样您就不必创建单独的服务,并且该指令可以在每次加载时处理加载和持久状态。