Javascript 为什么我的Angular.js$location.path(url)循环回根目录?

Javascript 为什么我的Angular.js$location.path(url)循环回根目录?,javascript,angularjs,events,url-routing,Javascript,Angularjs,Events,Url Routing,使用Angular.js,我试图创建一个按钮,当单击该按钮时,会将成员推到一个新url(无页面重新加载),并让$routeProvider设置一些$routeParams供控制器在调用JSON数据时使用 我的$routeProvider设置如下: app.config(function ($routeProvider) { $routeProvider.when('/list/:base/:keyword', { templateUrl: 'list', controller: 'lis

使用Angular.js,我试图创建一个按钮,当单击该按钮时,会将成员推到一个新url(无页面重新加载),并让
$routeProvider
设置一些
$routeParams
供控制器在调用JSON数据时使用

我的
$routeProvider
设置如下:

app.config(function ($routeProvider) {
    $routeProvider.when('/list/:base/:keyword', { templateUrl: 'list', controller: 'listCtrl' })
});
这将使用“列表”模板加载
listCtrl
。在
列表Ctrl
上,我调用如下数据:

app.controller('listCtrl', function ($scope, $routeParams, $location, $http) {
    console.log('listCtrl called');
    $http.get('urlForData&kw=' + $routeParams.keyword).success(function (data) {
        $scope.results = data;
    });
});
如果我手动点击url/#/list/baseName/关键字,将所有正确的
$routeParams
放入
listCtrl
中,JSON调用就可以了,那么这个方法很好地工作

我想让用户点击该路线,在my
homeCtrl
中,我有一种方法可以更改路线,如下所示:

app.controller('homeCtrl', function ($scope, $routeParams, $location) {
    var model = {
        criteria: 'yakiniku',
        base: 'yokota-ab-japan'
    };
    $scope.model = model;

    $scope.changeRoute = function () {
        $location.path('/list/' + model.base + '/' + model.criteria);
    };
});
我没有将url放入
changeRoute()
方法中,因为我希望根据成员在两个输入中输入的值指向url,所以我将模型属性连接到
$location
服务上的
.path(url)
方法中

然后我在HTML
上放置了一个
ng click=“changeRoute()”属性。但是,当我单击该按钮时,我可以在一瞬间看到url的更改,然后切换回根url。我没有
。否则()
路由设置,为什么它会立即跳回根目录

此外,我没有引用第三方库,只有angular

更新 可能需要注意的是,当我设置
$locationProvider
使用Html5模式时,它会很好地更改url。。。但由于我在ASP.NETMVC网站上托管应用程序,我需要它使用散列,而不是HTML5模式


当路由更改在HTML5模式下工作时,不带哈希标记的url上的页面刷新将中断,因为它会干扰ASP.NET MVC路由,并且我正在尝试允许深入链接到我的angular应用程序。

您应该检查是否启用了HTML5路由。这里是指向文档的链接:.$location


以下是您的情况的工作示例:

我遇到了类似的问题,并得到了解决方案。我希望这对某人有帮助。 我在控制器中有一个函数,它使用定位方法更改路径。是这样的:

$scope.goHome = function(){
    $location.path('/home');
}
当我使用href=“#”从锚定标记调用函数时,它会失败

诀窍是删除href属性。据我所知,angular会将您移动到新路径,但随后浏览器会执行href属性中的#值,您会发现自己回到了同一页面

因此,如果删除href=“#”命令,它将正常工作。如果你是一个手光标链接的爱好者,使用CSS来获得它

.myLink{
    cursor:pointer;
}
干杯,
Doruk

应用程序中任何将
模型更改为空字符串或
null
的条件,以便路径不会以
:关键字
组件结束?不应该是,我发布的代码几乎是所有代码,减去模板。如果我发垃圾邮件的按钮,我可以找出它的网址试图放在地址栏。。。这是正确的,但出于某种原因,返回到根目录。我没有启用HTML5路由。我需要保持它基于散列,因为该应用程序托管在ASP.NET MVC站点上,并且需要避免与ASP.NET MVC路由冲突。您可以在plunker/fidler上创建示例或修改我的示例以反映您的问题吗?如何处理plunker中的url更改?只需打开输入一些关键字并按“Go”查看url的散列将如何更改。谢谢,这是我的问题!这么简单的事…天啊。