2017-10-10 42 views
1

我使用angular-ui-router 1.0.3,我想實現這個網址http://localhost:8888/details/2020?pending=true但是當我鍵入網址在瀏覽器和命中enter加載網頁時,自動更改URL這個http://localhost:8888/app/details/%7BParam:orderid%20%7BParamType:path%7D%20squash:%20'false'%20optional:%20false%7D?pending=%7BParam:pending%20%5Bobject%20Object%5D%20squash:%20%27false%27%20optional:%20true%7DAngularJS UI.router重定向到URL可怕

這是我的app.config()代碼

$stateProvider.state('details',{ 
    url:'/details/:orderid?pending', 
    name:'details', 
    templateUrl:'/views/details.html', 
    resolve:{ 
      load:function($q, $rootScope){ 
       var dfrd = $q.defer(); 
       require(['/js/details.js'],function(){ 
        dfrd.resolve(); 
        $rootScope.$apply(); 
       }) 
       return dfrd.promise; 
      } 
     } 
}) 

如果我使用$state.go({details:2020,pending:true})從其他視圖完美的作品。

角度-UI-router.min.js:sourcemap:13過渡抑制($ ID時,我打的URL

而且我得到這個錯誤在控制檯上輸入出現的問題: 0 類型:2,消息:過渡已被其他 過渡取代,詳細信息:過渡#1(''{} - > 'details'{「orderid」:「{Param:orderid {ParamType:path} squash:'false' 可選:false}「}))

+0

您的網址以訂單ID停止。不包括問號和掛起。 –

+0

刪除問號並掛起配置文件中的URL。 –

+0

與'url:'/ details /:orderid''結果相同。當realod'http:// localhost:8888/details/2020'變成 'http:// localhost:8888/details /%7BParam:orderid%20%7BParamType:path%7D%20squash:%20'false'%20optional :%20false%7D' – Mariano

回答

0

[已解決] 在我app.run()我有:

$transitions.onBefore({},function(event) { 
     var target = event._targetState._definition; 
     $rootScope.toState = target.name 
     $rootScope.toParams = target.params 
     if(target.name == 'signin') return true; 
     return auth.signin(); 
}); 

但均使用$rootScopeonBefore事件中的所有問題。所以,我實現最終的代碼是:(注意沒有$rootScope

$transitions.onBefore({},function(event) { 
     var target = event._targetState._definition; 
     if(target.name == 'signin') return true; 
     return auth.signin({toState:target.name,toParams:target.params}); 
}); 

和這段代碼無需改動:

$stateProvider.state('details',{ 
    url:'/details/:orderid?pending', 
    name:'details', 
    templateUrl:'/views/details.html', 
    resolve:{ 
      load:function($q, $rootScope){ 
       var dfrd = $q.defer(); 
       require(['/js/details.js'],function(){ 
        dfrd.resolve(); 
        $rootScope.$apply(); 
       }) 
       return dfrd.promise; 
      } 
     } 
})