为什么不会$ location.path引发$ routeChangeStart控制器?(Why w

2019-10-20 01:59发布

我的测试有:

it("should clear the search field when the URL changes", function() {
  createController();
  $scope.init();
  $scope.searchTerm = 'some term';

  $location.path('/source');
  $rootScope.$apply();

  expect($scope.searchTerm).toBe('');
});

我的控制器是:

angularMoonApp.controller('SearchController', ['$scope', '$location', function ($scope, $location) {
  $scope.init = function() {
  $scope.$on('$routeChangeStart', function(next, current) {
    $scope.searchTerm = '';
  });

  }

  $scope.init();
}]);

似乎很简单! 那么,为什么不就是触发,当我更改在测试中的位置?

Answer 1:

你需要注入$路线,因为$ routeChangeStart是$路由触发的事件。

angularMoonApp.controller('SearchController', ['$scope', '$location', '$route', function ($scope, $location, $route) {

不知道您的使用情况下,如果你只需要检测的URL改变了,你可以听$ locationChangeStart代替。 $ locationChangeStart从$位置发射,这样你就不会需要注入任何新的依赖。



文章来源: Why won't $location.path trigger a $routeChangeStart in the controller?