2015-03-03 64 views
0

我一直在處理這個查詢字符串參數問題很長一段時間,如果去/一切正常,但如果嘗試像/?anything這樣就不會工作,這些是我的兩個國家,每個國家都有自己的文件。帶查詢字符串參數的角度ui路由器空白頁

var access = accessConfig.accessLevels; 
$stateProvider.state('store', { 
    abstract: true, 
    templateUrl: 'store/main.html', 
    data: { 
    access: access.user 
    } 
}); 

$stateProvider.state('store.home', { 
    url: '/?cart', 
    views: { 
    '': { 
     templateUrl: 'store/home/home.html', 
     controller: 'store.home as vm' 
    } 
    }, 
    data: { 
    title: 'Home' 
    } 
}); 

每當我去/我得到預期的結果沒有問題,但如果我嘗試去/?cart/?anything我得到一個空白頁,我有一個stateChangeStart事件被稱爲只要我去/但當我去/?anything事件甚至沒有被解僱。

順便說一句,我正在使用html5mode(true),發生了什麼事情的任何線索?

它適用於使用ui-sref,但如果直接在地址欄中複製/粘貼網址,則不起作用。

回答

0

我創建了working plunker here。它表明,這種情況和國家定義是正確的。

我們只是必須確保,即cart參數提供值。這些例子都可以工作,因爲我們通過車PARAM:

<a ui-sref="store.home({cart:458})"> 
<a ui-sref="store.home({cart:'xyz'})"> 

因爲plunker環境需要一些<base href=""來提供,我也使其與href工作有:

<div ng-controller="appCtrl" > 
    <a href="{{path}}?cart=abc"> 
    <a href="{{path}}?cart=123"> 
    ... 

其中path是:

.controller('appCtrl', ['$scope',function($scope) { 
    $scope.path = document.location.pathname; 
}]) 

檢查全部here,與html5Mode啓用

EXTEND

表明,當我們想通過地址欄通過PARAMS這是工作,甚至,我在這裏創造一個特殊的plunker

http://run.plnkr.co/plunks/syVPqrhNZpQJDdcCxx9b/?cart=myTestParam

,因爲我們可以看到,它通過參數/?cart=myTestParam,我們可以看到在這個模板中:<pre>{{$stateParams | json}}</pre>

{ 
    "cart": "myTestParam" 
} 

你可以看到這裏的代碼

http://plnkr.co/edit/syVPqrhNZpQJDdcCxx9b?p=catalogue

代碼

重要的部分是<head>部分,並與HTML5模式的正確設置的基礎元件

$locationProvider.html5Mode({enabled: true, requireBase: true}); 
+0

t hanks Radim,我忘了說它使用鏈接,但不使用直接訪問,如打字,複製/粘貼'/?cart = open',然後按回車。 – Gustavo 2015-03-03 16:02:34

+0

@Gustavo,我爲你創建了一個我的潛水者版本,可以直接訪問地址欄。你可以輸入你喜歡的任何參數,看看這些東西是如何工作的。希望它有幫助 – 2015-03-03 17:09:47

+0

非常感謝Radim,我看到你的代碼完美工作,但我的不是,這可能是別的。 – Gustavo 2015-03-03 18:16:40

相關問題