我的用户可以离开状态,但在我想要显示模式对话框之前“你要保存吗?”
仅当用户数据变脏时才意味着更改。
我不想要的是将我的EditController中的isDirty属性粘贴到$ rootScope转到stateChangeStart事件并检查isDirty然后显示/不显示保存对话框。
防止全局变量说每个javascript初学者书......
1。)那么在不破坏$ rootscope的情况下防止状态改变的专业方法是什么?
2。)ui-router是否有任何辅助库可以增强控制器内部的ui-router提供函数钩子来封装ui逻辑?
答案 0 :(得分:55)
(1)根据状态变更事件
下的docs $rootScope.$on('$stateChangeStart',
function(event, toState, toParams, fromState, fromParams){
event.preventDefault();
// transitionTo() promise will be rejected with
// a 'transition prevented' error
})
您可以在适当的地方将$ rootScope更改为$ scope。
在将自定义数据附加到状态对象下,您可以传递自定义数据。
(2)我不确定你问的是什么,但工厂/服务/供应商真的会有所帮助。
答案 1 :(得分:13)
使用$ transitions.onStart(angular-ui-router 1.0.0-rc)可以返回一个布尔值。如果false
转换将被取消。
$transitions.onStart({}, function (trans) {
var answer = confirm("Want to leave this page?")
if (!answer) {
return false;
}
});
以下是文档:https://ui-router.github.io/ng1/docs/latest/modules/transition.html#hookresult
答案 2 :(得分:2)
虽然在编写本文时它不是稳定版本的一部分,但UI路由器的1.0版本将使用onEnter / onExit的返回值来阻止导航。