Angular JS $ location.path(...)没有触发路由控制器

Dav*_*osh 6 javascript angularjs

所以我正在尝试使用表单提交更新路径

$location.path('/search');
Run Code Online (Sandbox Code Playgroud)

但它并没有触发注册的路线'/search'我也尝试了尾随斜线.没什么,我也尝试了,$scope.$apply但我只是得到了$apply already in progress错误所以肯定有一个范围.

为什么这不会调用注册到路由的控制器或加载templateUrl注册到它的路由器.

路由器

App.config(function ($routeProvider, $locationProvider) {

    $locationProvider.html5Mode(true).hashPrefix('!');

    $routeProvider
        .when("/", {
                "controller"  : "HomeController",
                "templateUrl" : "templates/home.html"
        })
        .when("/search", {
                "controller"  : "SearchResultsController",
                "templateUrl" : "templates/search-results.html"
        })
        .when("/search/:location", {
                "controller"  : "SearchLocationController",
                "templateUrl" : "templates/search-results.html"
        })
        .otherwise({
                "redirect" : "/"
        });
});
Run Code Online (Sandbox Code Playgroud)

表单ng-submit回调

$scope.doSearchRequest = function (event, params) {
    // Prevent the default action
    event.preventDefault();
    $scope.data = params;

    $location.path('/search/');
};
Run Code Online (Sandbox Code Playgroud)

编辑

添加这个

$scope.$on('$routeChangeStart', function(next, current) { 
           $console.log('$routeChangeStart', arguments);
        });
Run Code Online (Sandbox Code Playgroud)

就在$location.path电话显示路线没有开始改变之前.这是一个错误Angular 1.2.5吗?

Dav*_*osh 3

所以事实证明我实际上需要ng-view在页面上有一个地方才能让整个系统正常工作。

看起来有点奇怪,但它确实有效。

  • 您可以深入利用您的答案吗?您的意思是您之前没有包含 ng-view 吗?或者你只是把它放在根目录下?因为我有 ng-view,但是当路线从 1 开始并转到 2,然后返回 1 时,控制器任一视图都不会加载 (2认同)