[英]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
。 _.findIndex
在myRouteSteps
找不到''
,並且toStateIndex
變為-1
。 -1
至不等於0
,因此落在else
塊, -1 - 1
是-2
, myRouteSteps[-2]
超出范圍。
在通過ng-annotate和diff與原始文件傳遞我的文件后,發現狀態聲明中缺少di注釋之一。
從現在開始,我將使用ng-annotate而不是嘗試自己轉換Angular應用的縮小版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.