无法在控制器中修改$ stateParam参数

时间:2017-01-11 14:32:01

标签: javascript angularjs angular-ui-router

我正在使用$state.go('someState', {'param':true})重定向到一个状态,你可以看到我正在修改一个标志。

然而,当我尝试通过状态控制器中的$stateParams.param = false;将标志切换回false时,似乎没有发生任何事情并且标志仍为true

我在这里做错了吗?

修改

这是重定向发生的地方

app.controller("MainController", function($scope, $state) {

   $scope.$on('$ionicView.loaded', function() {
     ionic.Platform.ready(function() {
       if (navigator && navigator.splashscreen) navigator.splashscreen.hide();
     });
   });

   this.reset = function() {
     $state.go('register', {
       'reset': true
     });
   }
});

这是尝试更改标志的地方

app.controller("OtherController", function($scope, $state, $stateParams) {

   $scope.$on('$ionicView.beforeEnter', function() {
      var reset = $stateParams.reset;
      if (reset) {              
        $stateParams.reset = false;
        alert("After resetting, set flag back to false: " + $stateParams.reset);    
      }
   });

});

另一个编辑

这就是我在app app中设置OtherController状态的方式。请注意,我没有为MainController设置状态,但我显然仍在index.html中指定它。我还在其各自的模板文件OtherController中指定register.html

$stateProvider
.state('register', {
  url: '/register',
  params: {
    'reset': false
  },
  templateUrl: 'templates/register.html'
})

2 个答案:

答案 0 :(得分:0)

Mayby你可以这样做。使用事件$ stateChangeStart而不是$ ionicView.beforeEnter

 $rootScope.$on("$stateChangeStart",   function(evt, to, toP, from, fromP)        {  
     var reset = toP.reset;
     if (reset) {              
        toP.reset = false;
        alert("After resetting, set flag back to false: " + toP.reset);    
     }

});

答案 1 :(得分:-1)

你是否在你的控制器中注入了$stateParams,如下所示?

controller('testCrtl',
    [       '$scope','$stateParams'
    function($scope , $stateParams ) {
....
....
}

编辑.............

你错过了路由吗?如果是的话.... 您需要像这样实现路由

$stateProvider.state('toState', {
  templateUrl:'test.html',
  controller:'stateController',
  params: {
    'reset': true, 
  }
});

然后您可以像这样导航到它:

$state.go('register', {
       'reset': true
     }