簡體   English   中英

UI路由器狀態:如何使用$ rootScope使app.run運行。

[英]UI-Router States: How to make app.run with $rootScope.$on minification safe

我在應用程序中使用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在找不到的情況下可以返回-1 0是數組中的第一項,找不到-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塊, -1 - 1-2myRouteSteps[-2]超出范圍。

在通過ng-annotate和diff與原始文件傳遞我的文件后,發現狀態聲明中缺少di注釋之一。

從現在開始,我將使用ng-annotate而不是嘗試自己轉換Angular應用的縮小版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM