当前位置: 首页 > 知识库问答 >
问题:

$location.path将哈希更改为#

毋琪
2023-03-14

我想重定向到另一个页面

$location.path('/' + $scope.config_path.school + '/' +
        $routeParams.someUrl + '/#some-div-id')

这工作正常,但它首先会变为

/%23some-div-id  #If '#' is not already present in the URL
/%23some-div-id#some-div-id #If '#' is laready present in the URL
/#some-div-id

我也试着跟随

$location.path('/' + $scope.config_path.school + '/' +
        $routeParams.someUrl + '/').hash('some-div-id')

它正在创建一个正确的URL,但没有向下滚动到id为某个DIV id的DIV

编辑

app.run(function($rootScope, $location, $anchorScroll, $routeParams) {
  $rootScope.$on('$routeChangeSuccess', function(newRoute, oldRoute) {
    setTimeout(function() {
      if ($location.hash()) {
        $anchorScroll($location.hash());
      }
    });
  });
})

app.controller('MainCntrl', function($scope, $location, $anchorScroll, $routeParams) {
});

另外我尝试了$location.path

共有3个答案

叶举
2023-03-14

$location。路径(第页);

只需通过add$location在ur控制器中添加依赖项,此方法将在该路由上重定向您,不会出现任何错误。

程赞
2023-03-14

这种行为是意料之中的。默认情况下,Angular不允许在url中出现第二个,因此第一个之外的每个都将被转义,从而导致的转义字符:http://www.w3schools.com/tags/ref_urlencode.asp.

您可以尝试通过将以下内容添加到您的. config块来启用html5Mode:

$locationProvider.html5Mode({
    enabled: true
});

如果这不能解决您的问题,或者如果您需要支持IE8,那么您最好使用$anchorScroll()

这是文件。

在应用程序中,您可以将要滚动到的divid作为url中的参数传递(使用$routeParams或ui路由器的$stateParams),然后调用一个函数,在页面加载时立即滚动到该div,例如:

$scope.scrollTo = function(id) {
   $location.hash(id);
   $anchorScroll();
}

有关如何使用$anchorScroll()解决特定问题的更详细说明,请阅读以下内容:

如何处理AngularJS中的锚哈希链接

即本节:

像往常一样设置角度布线,然后添加以下代码。

app.run(function($rootScope, $location, $anchorScroll, $routeParams) {
  //when the route is changed scroll to the proper element.
  $rootScope.$on('$routeChangeSuccess', function(newRoute, oldRoute) {
    $location.hash($routeParams.scrollTo);
    $anchorScroll();  
  });
});

您的链接如下所示:

<a href="#/test?scrollTo=foo">Test/Foo</a>
薛保臣
2023-03-14

尝试使用$location.url而不是$location.path

根据留档,$location.path仅更改路径,而$location.url更改路径、搜索和哈希。

所以代码就像

$scope.goto = function() {
    $location.url('pageone#one');
};

其中pageone是状态的URL,#one是ID

另外,要使它在直接访问带有ID的URL时工作,请使用$anchorScroll。在$stateChange成功事件中,检查天气$location.hash是否存在。如果存在,则调用$anchorScroll。代码看起来像

.run(function($rootScope, $location, $anchorScroll,$timeout) {
    $rootScope.$on('$stateChangeSuccess',
        function(event, toState, toParams, fromState, fromParams) {
            $timeout(function() {
                if ($location.hash()) {
                $anchorScroll();
               }
          });
    });
})

示例-http://plnkr.co/edit/4kJjiMJImNzwLjRriiVR?p=preview(查看URL检查http://run.plnkr.co/plunks/4kJjiMJImNzwLjRriiVR/#/pageone的变化)

 类似资料:
  • 我正在寻找一种通过改变散列来改变部分样式的方法。让我以一个例子来解释: > 当前URL为: 然后单击复选框,URL将更改为: 我想更改类的。 我尝试了以下代码,但它不起作用: 实际上,每次哈希更改时,控制台中都不会出现任何内容。

  • 问题内容: 我正在尝试处理JSON文件: 我希望能够: 更新键值对上的值 删除键/值 删除或插入一个数组值 我已经做了很多事情来解决这个问题。 我的简化代码思路是: 生成的JSON应该是: 我不确定如何使用这种结构的JSON。 问题答案: 我了解您的JSON可能如下所示: 我建议使用OpenStruct来组织数据: 然后,您得到了所有想要的东西。对于您显示的操作: 然后,进行更改后,可以使用: 您

  • 问题内容: 我有一个实现了hashCode()的向量类。它不是我写的,而是使用2个质数对2个向量分量进行异或运算。这里是: …因为这是来自已建立的Java库,所以我知道它可以正常工作。 然后,我有一个Boundary类,其中包含2个向量:“开始”和“结束”(代表直线的端点)。这两个向量的值是边界的特征。 在这里,我尝试为构成该边界的向量的唯一2元组(起点和终点)创建一个良好的hashCode()。

  • 问题内容: 在Java 8 java.util.Hashmap中,我注意到来自的更改: 至: 从代码中可以看出,新功能是低16位的简单形式,而高16位则保持了高16位不变,这与先前实现中的几种不同移位相反,并且从注释中可以看出,这在分配上不太有效散列函数的结果,其中低位对不同的存储区具有大量冲突,但由于必须执行较少的操作,因此节省了CPU周期。 我在发行说明中唯一看到的是从链接列表到平衡树的更改,

  • 我必须为我们新的Laravel 5.6网站使用一个旧的用户数据库。现在我有办法要求所有用户重新制作密码。旧址为joomla 3.7。在玩了一会儿之后,我发现,在登录Joomla 3.7时检查密码。5用过。。。 要设置新用户的密码... 我在Laravel找到了大约6个地方可以改变... 我就是找不到登录挑战? LoginController中没有任何内容。 所以真正的问题是登录在哪里-

  • 哈希是键/值对 如果你想按名字查询,那么需要哈希。哈希的键必须唯一,但值可以是任意标量。 有时候你仍然会看到人们称它为“关联数组”,但不要想当然的把它作为数组。 通过键/值对列表来创建哈希 使用键/值对列表创建哈希: my %stooges = ( 'Moe', 'Howard', 'Larry', 'Fine', 'Curly', 'Howard', 'Iggy'