状态参数没有通过ui-router传递

时间:2016-08-02 15:56:51

标签: angularjs angular-ui-router

我的代码是这样的:

$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时,查询字符串将从网址中删除。并且$state.go('results', {a:10, b:20, c:30}也不起作用。将params从查询字符串参数更改为url参数也不起作用。这里有一些愚蠢的错误,我无法压制!

我已尝试从express更改为连接服务器,但没有更改。那么有没有人经历过这个,你是如何解决它的?

我目前的连接设置如下:

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() ];
        }
    } );
} );

修改

当我console.log $state.go之前的参数时,信息是正确的,当我从console.log的控制器$stateParams results时,我得到{{} 1}}。

EDIT2:

我试过这个也无济于事。

{ a: undefined, b: undefined, c: undefined }

在来自州的控制器中:

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

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

UPDATE3:

我创建了另一个州class OptionsController { constructor($state) { this.$state = $state; } // ... submit() { console.log(this.options()); // prints the correct info this.$state.go('results', this.options()); } } 。那状态看起来像这样:

test

当我输入$stateProvider .state('test', { url: '/x/:y', controller($stateParams) { 'ngInject'; console.log(JSON.stringify($stateParams)); } }) 时,我会立即重定向到http://localhost:8888/x/10。这太奇怪了!

2 个答案:

答案 0 :(得分: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 :(得分:0)

好。找到了解决方案。这是因为一个指令拦截ui路由器就像这个$scope.$on('$stateChangeStart', performAnimation);一样动画。

稍后在代码中我使用$state.go(toState.name)并忘记添加参数。

愚蠢的错误,就像所有愚蠢的错误一样!所以指出:检查你是否在任何地方拦截'$ stateChangeStart'!:)