2016-08-02 53 views
0

我的代碼是這樣的:國家PARAMS不與UI的路由器通過

$stateProvider 
     .state('results', { 
     url: '/results?a&b&c', 
     controller($stateParams, $state) { 
      'ngInject'; 

      console.log($stateParams); 
      console.log($state.params); 
     }, 
     template: '<div>Hello world</div>' 
    }); 

..而當我通過在localhost:8888/results?a=10&b=20c=30,查詢字符串從URL中剝離。並且$state.go('results', {a:10, b:20, c:30}也不起作用。將查詢字符串params中的參數更改爲url參數也無效。這裏有一些愚蠢的錯誤,我無法壓扁!

我已經嘗試從快遞更改爲連接服務器,但沒有變化。所以有誰經歷過這個,你是如何解決它的?

我的當前連接設置如下:

const connect = require('gulp-connect'); 
const history = require('connect-history-api-fallback'); 

gulp.task('serve', function() { 
    connect.server({ 
     root: conf.dest, 
     port: conf.port, 
     middleware: function(connect, options) { 
      return [ history() ]; 
     } 
    }); 
}); 

編輯:

當我$state.go之前console.log的參數,該信息是正確的,當我console.log$stateParamsresults控制器,我得到{ a: undefined, b: undefined, c: undefined }

EDIT2:

我想這也無濟於事。

$stateProvider 
    .state('results', { 
     url: '/results/:a/:b/:c', 
     controller($stateParams, $state) { 
      'ngInject'; 

      console.log($stateParams); 
      console.log($state.params); 
     }, 
     template: '<div>Hello world</div>' 
    }) 

而且在從狀態控制器:

class OptionsController { 
    constructor($state) { 
     this.$state = $state; 
    } 

    // ... 

    submit() { 
     console.log(this.options()); // prints the correct info 
     this.$state.go('results', this.options()); 
    } 
} 

UPDATE3:

我創造了另一個狀態test。這種狀態是這樣的:

$stateProvider 
    .state('test', { 
     url: '/x/:y', 
     controller($stateParams) { 
      'ngInject'; 

      console.log(JSON.stringify($stateParams)); 
     } 
    }) 

當我進入http://localhost:8888/x/10,我立即重定向到http://localhost:8888/x/。這超出了怪誕!

+0

使用參數添加路由器的配置 – rbinsztock

+0

我的另一個途徑是配置'$ locationProvider.html5Mode(真);'和'$ urlRouterProvider.otherwise( '/');' – user3654410

回答

0
$stateProvider 
     .state('results', { 
     url: '/results?:a&:b&:c', 
     controller($stateParams, $state) { 
      'ngInject'; 

      console.log($stateParams); 
      console.log($state.params); 
     }, 
     template: '<div>Hello world</div>', 
     params : { 
     a : null, 
     b : null, 
     c : null 
     } 

    }); 

更多類似這樣的內容。

+1

http://stackoverflow.com/ a/29796466/861206 – rbinsztock

+0

這不起作用。 :/ – user3654410

0

好的。找到解決方案。這是由於爲了動畫而攔截了像這樣的UI路由器$scope.$on('$stateChangeStart', performAnimation);

後來在代碼中我使用了$state.go(toState.name),忘記加回參數。

愚蠢的錯誤,像所有愚蠢的錯誤!所以指出:檢查是否在任何地方攔截'$ stateChangeStart'! :)