【发布时间】:2015-01-08 11:12:23
【问题描述】:
我正在开展一个项目,我们在页面上有一系列项目。 单击此页面上的每个项目时,都会打开一个模式,向用户显示一个按钮,该按钮指向一个单独的控制器和另一个视图。
当用户点击已加载页面上的后退按钮时,它会将用户带到数组页面。我需要按下后退按钮才能查看模式,并且我已经通过了几个选项:
将加载的页面转换为覆盖原始模态的模态,因此当用户单击按钮时,它将打开它,将原始模态留在原处。
重新连接后退按钮以更改状态以使用
$state.go()。这需要在每个控制器中。篡改
$rootScope.viewHistory,这似乎是最骇人听闻的选项。这将读取先前的状态并直接对其进行编辑以使后退按钮指向其他位置。在
$rootScope中有一个返回按钮功能,可以传入两个参数:state和stateParameters。这将检查是否有任何东西传递给它并相应地改变状态。如果没有传递任何内容,它将使用正常的后退按钮功能。
优点和缺点
(1) 将此页面转换为模式的主要问题是它需要复制页面,这是因为它需要在两个控制器中,这样我们就不会丢失项目列表页面上的数据和它需要可以从它自己的控制器内的菜单中访问。这可能有用的原因是另一个页面需要以这种方式工作。
(2) 调整后退按钮的主要问题是后退按钮目前仅位于一个页面上,即菜单,这是所有其他状态的抽象父状态。这可能意味着我们需要将后退按钮拉到每个页面上,以逐页更改其功能。这也可能会在更改状态时弄乱页面的滑动方式,因为我不知道有什么方法可以从函数中调用滑动方向。
(3) 这看起来相当容易,但我不知道这是否可行,而且感觉真的很hacky
(4) 如果我们要为后退按钮提供$rootScope 函数,我们需要首先调用它,此时,一个控制器会在其他任何控制器之前被调用,但这一切都可能改变一旦我们集成了推送通知。
什么是最好的解决方案?我是否应该在加载基于$rootScope 的后退按钮的主控制器中返工(这可能吗?)?有没有办法在不同的控制器中加载模态,同时将数据保留在原始控制器中?我最好的选择是什么?
【问题讨论】: