regularjs / regular-state

regular router based on stateman
http://regularjs.github.io/regular-state/
MIT License
13 stars 9 forks source link

如何在跳转过程中中止中跳转并跳到另一个页面? #5

Closed Neugls closed 6 years ago

Neugls commented 6 years ago

是这样的情况:

const router = Restate({routes: {
   'app': {
           url: '',
           view: Application
    },
    'app.introduce':{
           url: '',
            view: Introduce
    },
   'app.view': {
           view: View
    }
})

默认是会跳转到 app.introduce, 但如果因为某些条件的需要比如恢复上次的状态, 这个时候就不需要先转到app.introduce, 有没有方法可以直接启动就跳转到app.view.

如果在初始化后直接调用: router.go("app.view") 会出现app里的共有模板出现双份复制的情况

Neugls commented 6 years ago

现在的到一个不知道是不是的解决方案:

在 view 的enter 勾子里这样写:

enter: function(option, resolve){
         if( 条件 ){
            this.$state.go("app.view")
         }
        resolve();
}

或者是通过setTimeout来解决, 但setTimeout 会出现闪的问题

leeluolee commented 6 years ago

需求是 app.view 跳出前要加判断么?

Neugls commented 6 years ago

需求是要在

app.introduce 

显示出来前进行判断跳转

fengzilong commented 6 years ago

Introduce.js

{
    canEnter: function ( e ) {
        if ( ... ) {
            e.stop();
            this.$state.go( 'app.view' );
        }
    }
}

@Neugls 试试这个

Neugls commented 6 years ago

@fengzilong
canEnter 也是一个勾子函数吗?我在view里加了这个方法, 加断点并不会被正确调用, 文档里好像也没有这个函数的说明

fengzilong commented 6 years ago

我看代码里面是有这个钩子函数的呀

https://github.com/regularjs/regular-state/blob/db7245657963461c951dea505c4afa131b2a1b44/restate.js#L162-L164

你把断点打在上面这个位置试试

Neugls commented 6 years ago

@fengzilong OK, 我刚看了state-man的文档, 有这样的一段代码


stateman.state('app.user',{
  'canEnter': function(){
    return !!isUser;
  }
})

和你说的, 我都试试, 谢谢!

Neugls commented 6 years ago

@fengzilong 可能是版本的问题, 我现在用的是 regular-state@^0.6.0-beta.8

没有restate.js

fengzilong commented 6 years ago

@Neugls 是版本问题,我直接去看master的代码了...

新版本好像是这么用的

manager.state('app.blog', {
    url: '/blog/:id'
    view: Blog,
    canEnter( e ) {
        // ...
    }
})

你试下可以么

Neugls commented 6 years ago

@fengzilong image

像上图一样, 新版本能够正常调用,也能正常跳转!谢谢!

fengzilong commented 6 years ago

不客气,那这个issue我关掉了~~