多个$ stateParams导致控制器被多次调用

时间:2016-06-07 01:20:31

标签: angularjs

我有一个stateProvider,它看起来像:

$stateProvider.state('test.example', {
        url: '/test?param1&param2',
        templateUrl: 'test/testParam.html',
        controller: 'testParamCtrl'
});

当我在控制器中控制log $ stateParams时,它会运行两次。只有当我在我的应用上的标签之间切换时才会发生这种情况。如果我刷新应用程序,则不会发生此问题。

似乎控制器是"建造" stateParams对象并每次实例化控制器。因此,我在第一次实例化过程中得到了一些未定义的param2角度误差。这是控制台日志的样子:

Object {param1: "data1", param2: undefined} // first instantiation
Object {param1: "data1", param2: "data2"} // second instantiation

然而,当我刷新页面时,只显示一个控制台日志,这是"正确的一个" (即param1和param2都是定义的)。

提前致谢!

3 个答案:

答案 0 :(得分:1)

我的猜测是'test/testParam.html'你有ng-controller="testParamCtrl"。删除模板中的ng-controller或删除状态定义中的controller属性。

答案 1 :(得分:0)

我认为您需要将州定义更改为:

$stateProvider.state('test.example', {
        url: '/test/:param1/:param2',
        templateUrl: 'test/testParam.html',
        controller: 'testParamCtrl'
});

以正确的方式传递参数。

答案 2 :(得分:0)

您需要指定参数值

   $stateProvider.state('test.example', {
    url: '/test/:param1/:param2',
     params: { 
     param1: "data1",  
    param2: "data2"  }
    templateUrl: 'test/testParam.html',
    controller: 'testParamCtrl'});