Angularjs,Ionic Framework - 导航回模态的选项
Angularjs, Ionic Framework - Options for navigating back to a modal
我正在做一个项目,我们在页面上有一组项目。
单击此页面上的每个项目时,都会打开一个模式,向用户显示一个按钮,该按钮会导致一个单独的控制器和另一个视图。
当用户点击已加载页面上的后退按钮时,会将用户带到阵列页面。我需要按下后退按钮才能查看模态,我已经完成了几个选项:
将加载的页面变成覆盖原始模态的模态,因此当用户单击按钮时,它将打开它,而原始模态保留在原位。
重新连接后退按钮以更改状态以使用 $state.go()
。这将需要在每个控制器中。
篡改 $rootScope.viewHistory
,这个选项似乎是最骇人听闻的。这将读取之前的状态并直接编辑它,使后退按钮指向其他地方。
在$rootScope
中有一个后退按钮功能,可以传递两个参数:state和stateParameters
。这将检查是否已将任何内容传递给它并相应地更改状态。如果没有传递任何内容,它将使用正常的后退按钮功能。
优缺点
(1) 将此页面转换为模态页面的主要问题是需要复制页面,这是因为它需要位于两个控制器内,这样我们就不会丢失项目列表中的数据页面,并且需要从其自己的控制器中的菜单访问它。这可能有用的原因是另一个页面需要以这种方式工作。
(2) 调整后退按钮的主要问题是后退按钮目前仅位于一个页面上,菜单是所有其他状态的抽象父状态。这可能意味着我们需要将后退按钮拉到每个页面上以逐页更改其功能。这也可能会弄乱页面在更改状态时的滑动方式,因为我不知道有任何方法可以从函数中调用滑动方向。
(3) 这看起来相当简单,但我不知道这是否可行,感觉真的很糟糕
(4) 如果我们要为后退按钮设置一个 $rootScope
函数,我们需要先调用它,此时,一个控制器会先于其他控制器被调用,但是一旦我们集成推送通知,这一切都可能改变。
最好的解决方案是什么?我是否应该在加载基于 $rootScope
的后退按钮的主控制器中返工(这可能吗?)?有没有办法在将数据保留在原始控制器中的同时在不同的控制器中加载模态?我最好的选择是什么?
首先,这是一个笨拙的设计模式。如果您触发了一个模态,所有 UI 之后的转换都应该限制在模态中,这样您就不会混淆您的用户。将模态看作是简单地钻入一个动作而不是导航元素的东西。如果每个数组元素需要多个交互页面,请将它们全部构建在模态内。您应该能够在自定义指令中完成此操作。
如果您绝对需要使用模态作为在应用中其他地方导航的中间体,我建议缓存触发模态所需的参数(通过本地存储、会话存储、cookie 等)。当用户第一次触发模式时,存储参数。当您导航到父控制器时,检查参数是否存在,如果存在,则以编程方式触发模态。只要模式 closes/the 用户从父页面导航回来,就不要忘记从存储中擦除参数。
我正在做一个项目,我们在页面上有一组项目。 单击此页面上的每个项目时,都会打开一个模式,向用户显示一个按钮,该按钮会导致一个单独的控制器和另一个视图。
当用户点击已加载页面上的后退按钮时,会将用户带到阵列页面。我需要按下后退按钮才能查看模态,我已经完成了几个选项:
将加载的页面变成覆盖原始模态的模态,因此当用户单击按钮时,它将打开它,而原始模态保留在原位。
重新连接后退按钮以更改状态以使用
$state.go()
。这将需要在每个控制器中。篡改
$rootScope.viewHistory
,这个选项似乎是最骇人听闻的。这将读取之前的状态并直接编辑它,使后退按钮指向其他地方。在
$rootScope
中有一个后退按钮功能,可以传递两个参数:state和stateParameters
。这将检查是否已将任何内容传递给它并相应地更改状态。如果没有传递任何内容,它将使用正常的后退按钮功能。
优缺点
(1) 将此页面转换为模态页面的主要问题是需要复制页面,这是因为它需要位于两个控制器内,这样我们就不会丢失项目列表中的数据页面,并且需要从其自己的控制器中的菜单访问它。这可能有用的原因是另一个页面需要以这种方式工作。
(2) 调整后退按钮的主要问题是后退按钮目前仅位于一个页面上,菜单是所有其他状态的抽象父状态。这可能意味着我们需要将后退按钮拉到每个页面上以逐页更改其功能。这也可能会弄乱页面在更改状态时的滑动方式,因为我不知道有任何方法可以从函数中调用滑动方向。
(3) 这看起来相当简单,但我不知道这是否可行,感觉真的很糟糕
(4) 如果我们要为后退按钮设置一个 $rootScope
函数,我们需要先调用它,此时,一个控制器会先于其他控制器被调用,但是一旦我们集成推送通知,这一切都可能改变。
最好的解决方案是什么?我是否应该在加载基于 $rootScope
的后退按钮的主控制器中返工(这可能吗?)?有没有办法在将数据保留在原始控制器中的同时在不同的控制器中加载模态?我最好的选择是什么?
首先,这是一个笨拙的设计模式。如果您触发了一个模态,所有 UI 之后的转换都应该限制在模态中,这样您就不会混淆您的用户。将模态看作是简单地钻入一个动作而不是导航元素的东西。如果每个数组元素需要多个交互页面,请将它们全部构建在模态内。您应该能够在自定义指令中完成此操作。
如果您绝对需要使用模态作为在应用中其他地方导航的中间体,我建议缓存触发模态所需的参数(通过本地存储、会话存储、cookie 等)。当用户第一次触发模式时,存储参数。当您导航到父控制器时,检查参数是否存在,如果存在,则以编程方式触发模态。只要模式 closes/the 用户从父页面导航回来,就不要忘记从存储中擦除参数。