AngularJS + Rails 4:包括$ location provider导致所有链接停止工作?

时间:2014-07-28 15:02:43

标签: ruby-on-rails angularjs

当我登陆特定页面(我的产品#show page,ex:/ products / 30)时,在我的Rails 4应用程序中点击页面上的任何链接,浏览器不会移动。但是,每次点击都会更改网址。

我调查了这个问题,似乎在我的AngularJS控制器中包含$location提供程序导致了这个问题,即使浏览器控制台没有任何错误。

BTW,我只在我的应用程序上使用AngularJS 2页,所以我决定坚持使用Rails路由。

application.html.erb<html ng-app="ilook">

在我的show.html.erb我有这个:

<div ng-controller="ProductCtrl">
{{ product }} zzz <!-- this prints 1 zzz -->
</div>

load-angular.js包含的application.js javascript文件中:

var app = angular.module('ilook', ["ngResource"]);

app.config(['$locationProvider', function($locationProvider) {
  $locationProvider.html5Mode(true);
}]);

在我的productscontroller.js中,这有效:

app.controller('ProductCtrl', ['$scope', '$resource', 'SingleProduct', function($scope, $resource, SingleProduct) {
  $scope.product = "1";
}]);

但包括$location会导致我的产品#show上的链接停止工作:

app.controller('ProductCtrl', ['$scope', '$location', '$resource', 'SingleProduct', function($scope, $location, $resource, SingleProduct) {
  $scope.product = "1";
}]);

我忘了包含模块吗?我需要$ location以便我可以使用路径/ products / 30以便我可以向我的Rails应用程序的API部分发出请求并获取给定ID的正确产品。使用$ routeParams似乎不起作用,因为我使用Rails路由而不是角度。任何帮助,将不胜感激。附:起初我认为这是一个Turbolinks问题,但即使在删除之后也没有任何改变。

== UPDATE ==

当我删除配置中的$locationProvider.html5Mode(true);行时,链接再次起作用。但是,即使在$location.path()/products/30也会返回一个空字符串。那我怎么抓住这条路呢?

1 个答案:

答案 0 :(得分:1)

当使用$ location处理未使用ng-route的页面上的查询参数时,我遇到了几乎相同的情况。我最终使用了html5mode的以下定义,它似乎解决了我的问题,链接不再有效。

$locationProvider.html5Mode({
    enabled: true,
    requireBase: false,
    rewriteLinks: false
});