20

如果您有一个控制器来操作 Angular.js 中的 $scope 变量,是否有一种惯用的方法:

  • 重置控制器的 $scope,并且
  • 重启控制器初始化?

对于复杂的控制器,不必将每个变量都重置为其初始值会非常方便,特别是如果您真正想要的是控制器和范围的简单重新初始化。但是,再次导航到相同的 URL$location.path()并没有帮助。

编辑:假设我不能使用任何$window.locationhack,因为这会违反 Chrome 打包应用程序中的 CSP。

4

2 回答 2

24

在询问之后,我终于找到了一种使用$route.reload().

myapp.Controller('SampleController', function($location, $route) {

  $scope.navTo = function(url) {
    if ($location.path() === url) {
      $route.reload();
    } else {
      $location.path(url);
    }
  }

});

我仍在想,必须有一些更优雅的解决方案,但这绝对适合我。

于 2013-07-01T22:20:08.087 回答
2

如果你使用 angular-ui-router 那么你应该这样做:

myapp.Controller('SampleController', function($state) {

    $scope.navigate = function (stateName) {
        if ($state.is(stateName)) {
            $state.reload();
        } else {
            $state.go(stateName);
        }
    }
});
于 2015-12-20T16:33:59.623 回答