javascript - UI-Router 状态 : How to make app. 使用 $rootScope.$ 在缩小安全上运行

标签 javascript angularjs angular-ui-router bundling-and-minification

我在我的应用程序中使用 UI-Router 并检查状态顺序是否正确,我使用如下代码:

.value('myRouteSteps', [
      { uiSref: 'myRoute.home', valid: true },
      { uiSref: 'myRoute.pageOne', valid: false },
      { uiSref: 'myRoute.pageTwo', valid: false },

])
.run([
        '$rootScope',
        '$state',
        'myRouteSteps',
        function ($rootScope, $state, myRouteSteps) {


            $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {

                var canGoToStep = false;

                var toStateIndex = _.findIndex(myRouteSteps, function (myRouteStep) {
                    return myRouteStep.uiSref === toState.name;

                });

                console.log('toStateIndex', toStateIndex)
                if (toStateIndex === 0) {
                    canGoToStep = true;
                } else {
                    canGoToStep = myRouteSteps[toStateIndex - 1].valid;
                }
                console.log('canGoToStep', toState.name, canGoToStep);

                // Stop state changing if the previous state is invalid
                if (!canGoToStep) {
                    // Abort going to step
                    event.preventDefault();
                }
            });
        }
]);

我在线 $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) { 遇到错误如果我缩小

所以我将其更改为 $rootScope.$on('$stateChangeStart', ['event','toState','toParams','fromState','fromParams', function (event, toState, toParams, fromState, fromParams) {

但我仍然收到错误。

更新:

当我查看缩小的代码时,我看到了这一点:

}]).run(["$rootScope", "$state", "orderSteps", function (n, t, i) {
        n.$on("$stateChangeStart", function (n, t) {
            var r = !1,
                u = _.findIndex(i, function (n) {
                    return n.uiSref === t.name

我想这是不对的...如何解决? 有什么建议吗?

最佳答案

_.findIndex 在未找到的情况下可以返回 -10 是数组中的第一项,未找到 -1。这会导致这里出现问题

if (toStateIndex === 0) {
    canGoToStep = true;
} else {
    canGoToStep = myRouteSteps[toStateIndex - 1].valid;
}

toStateIndex-1时,您将获得超出范围异常的索引。

你可能想要这样的东西:

if (toStateIndex < 0) {
    canGoToStep = true;
} else {
    canGoToStep = myRouteSteps[toStateIndex].valid;
}

解释一下这是如何发生的...当您第一次加载页面时,UI 路由器在尝试转到 '' 时将转到 '' 状态> 它触发$stateChangeStart_.findIndexmyRouteSteps 中找不到 '',并且 toStateIndex 变为 -1-1 不等于 0,因此它属于 else block ,-1 - 1-2myRouteSteps[-2] 超出范围。

关于javascript - UI-Router 状态 : How to make app. 使用 $rootScope.$ 在缩小安全上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29817190/

相关文章:

javascript - AngularJS 在 IndexedDB 调用后返回方法对象

javascript - 在嵌套的 ng-repeat 中时,AngularJS ng-click 事件不会触发

javascript - 带 ui 路由器的 Angular 2/5 页面动画

angular - 显示 1 条数据而不是所有 ngFor - Angular 11

javascript - 将/ja-jp/网站的标准字体样式更新为微软的Meiryo字体

javascript - 无法使用 jest.each 运行测试

javascript - XHR 似乎不会在与 Ember 的转换时触发

javascript - 简单对象字面量和嵌套对象字面量之间的区别

angularjs - Ng-admin:如何制作实体的自定义模板 listView?

angularjs - 将状态类应用于 ui-view 以允许不同的 ng 动画