【问题标题】:AngularJS - Multistep form with UI Router and Navigate using arrow keysAngularJS - 带有 UI 路由器和使用箭头键导航的多步表单
【发布时间】:2023-04-06 11:00:01
【问题描述】:

如何使用箭头键转到下一个或上一个表单步骤。我正在使用 AngularJS UI 路由器。下面的代码可以使用 prev 和 next 按钮进行导航。

.config(function($stateProvider, $urlRouterProvider) {
    $stateProvider    
        // route to show our basic form (/form)
        .state('wsp', {
            url: '/wsp',
            templateUrl: 'wsp_step',
            controller: 'wspYearController'
        })

        .state('wsp.first_step', {
            url: '/first_step',
            templateUrl: 'wsp_step_first'
        })

        .state('wsp.second_step', {
            url: '/second_step',
            templateUrl: 'wsp_step_second'
        })


    $urlRouterProvider.otherwise('/wsp/first_step');
})

要进入不同的步骤,我正在这样做

<button type="button" ui-sref="wsp.first_step">Prev </button>
<button type="button" ui-sref="wsp.third_step">Next</button>

【问题讨论】:

    标签: javascript html angularjs multi-step


    【解决方案1】:

    给你。一个keydown event listener,在$stateChange之前/之后具有自我处理事件解除绑定和绑定。 ng-keydown 在这里对你没有帮助 =(。希望 AngularJS 中的键处理能够得到改进。将它添加到你的 wspYearController 中应该没问题(如果它用于你谈论的所有路线)。

    /**
     * Key press binding
     */
    $(document).keydown(function(e) {
    
        switch(e.which) {
            case 37: // left arrow
            case 39: // right arrow
    
                //clean listener before state change 
                //else it would be listen all the time :)
                $(document).unbind('keydown');
    
                //back and forward all the time to the right place.
                if ($state.current.name === 'wsp.first_step') {
                    $state.go('wsp.second_step');
                } else {
                    $state.go('wsp.first_step');
                }
                break;
    
            default: return; // exit this handler for other keys
        }
    
        // prevent the default action (scroll / move caret)
        e.preventDefault();
    });
    

    这是一个plunker,它向您展示了它的演示。

    【讨论】:

    • 这不适用于按下哪个键。你必须分开左右箭头。
    • 当然可以,现在就包含在内。你想要一个工作示例@PaulsonPeter 吗?
    • 您能否提供工作示例,因为我收到“$state is not defined”错误
    • 您是否将$state 解析到您的控制器?这是一个 AngularJS 基础,请查看此链接:stackoverflow.com/questions/35022269/…
    • 是的,它正在工作,但返回后它不会再次移动到前面。这是处理这种情况的正确方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多