Angularjs $ location.url不起作用,location.href有效

时间:2014-05-26 10:01:10

标签: routing location directive

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

'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');

,然后它的工作原理。 我不知道这种行为。你呢?

2 个答案:

答案 0 :(得分:3)

虽然这个问题与状态有关,但是如何导航到另一个网址:

$location.url(myUrl);

这应该可行,但我已经看到了一些问题 - 即它会调用代码,但不会去任何地方。如果是这种情况,您也可以使用$window服务,如下所示:

$window.location.assign(url);

答案 1 :(得分:1)

如果您已经有$scope.apply()投放,请考虑使用$timeout作为解决方法。

不完美,但应该完成这项工作。 更好的情况:设置一个全局变量,你设置为&#34;已加载&#34;一旦你的api完成加载,然后更新你的函数/调用范围相关的操作。