【问题标题】:Angularjs $location.url doesn't work, location.href worksAngularjs $location.url 不起作用,location.href 起作用
【发布时间】:2014-07-15 01:51:57
【问题描述】:

当我尝试更改控制器中的位置时,它会加载服务器的根目录,而不是特定页面:

'use strict';

eventsApp.controller('TestController',
    function TestController($scope, $location){
        console.log('test comes here!');
        $scope.makeTest = function(){
            $location.url('/test');
        }
});

我有一个这样的路由器:

'use strict';

var eventsApp = angular.module('eventsApp', ['ngResource','ngSanitize'])
    .config(function($routeProvider, $locationProvider){
        $routeProvider
          .when('/test',{
            templateUrl:'templates/test.html',
            controller:'TestController'
        }).otherwise({
            templateUrl:'templates/default.html',
            controller:'DefaultController',
            redirectTo:''
        });
        $locationProvider.html5Mode(true);
    });

在我的 index.html 中我设置了指令

<base href="/">

似乎每次它都实现否则。但是,如果我使用

location.href = '/test';

而不是

$location.url('/test');

,然后就可以了。 我不知道这种行为。你呢?

【问题讨论】:

标签: routing location directive


【解决方案1】:

虽然这个问题与状态有关,但您可以通过以下方式导航到另一个网址:

$location.url(myUrl);

这应该可行,但我发现它存在一些问题 - 即它会调用代码但不会去任何地方。如果是这种情况,您也可以像这样使用$window 服务:

$window.location.assign(url);

【讨论】:

    【解决方案2】:

    如果您有一个 $scope.apply() 已经在运行,请考虑使用 $timeout 作为解决方法。

    不完美,但应该能胜任。 更好的情况:设置一个全局变量,一旦你的 api 完成加载,你就设置为“加载”,然后更新你的函数/调用范围相关的操作。

    【讨论】:

    • 这解决了我的$location.url(newUrl) 无法在ng-click 处理程序中工作的问题。
    • 我很高兴它有帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 2016-02-23
    • 2016-05-11
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多