在我的shell.js
中,我在 UI 中有一些选项,用户可以在导航到child.js
vm 之前选择这些选项。child.js
vm 需要提供此选项数据 。
如果我#/child
直接导航到,目前我会收到一些错误,因为尚未提供此数据。这是预期的行为......虽然我想以某种方式保护 child.js 视图不被直接访问。
理想的情况是,如果用户在子视图上刷新页面或直接导航到它(可以通过检查所需的选项数据是否存在来捕获),我通过不同的路线将它们推送到另一个视图。如果所需的选项数据在那里,我应该只能访问子虚拟机。
我试过这样做:
var vm = {
activate: activate
};
function activate() {
alert("ACTIVATED");
if (<check for data exists>) {
vm.data = ko.mapping.fromJS(<data>, mapping);
} else {
toastr.error("session data lost");
router.navigateTo("#/getdata");
}
};
return vm;
activate
但是,当数据不存在时, 我可以看到整个页面加载和上面的代码在从 router.navigateTo 加载新视图之前运行。
如何在上面的任一 router.navigateTo 处完全退出 vm(并防止任何进一步执行),或者如果某些数据不可用(首选)以某种方式保护路由甚至不加载 vm?