重新初始化Angular.js控制器

bfn*_*ncs 19 javascript angularjs angularjs-scope angularjs-controller

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

  • 重置控制器的$ scope,和
  • 重启控制器初始化

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

编辑:假设我无法使用任何$window.location黑客,因为这会违反Chrome打包应用中的CSP.

bfn*_*ncs 22

在询问之后,我终于找到了一种方法来解决这个问题$route.reload().

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

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

});
Run Code Online (Sandbox Code Playgroud)

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

  • @popovitsj:虽然很高兴知道这不一定被认为是不好的做法,但我仍然不相信.虽然你肯定对这个解决方案有一定的吸引力,因为语义上`$ route.reload()`类似于重新加载页面,它仍然会产生大量的开销.这在许多特定的用例中可能是可以忽略的(当时它确实存在于我的中),但是使用同样干净的方法避免产生这种开销仍然是很好的. (6认同)