【问题标题】:Angularjs: update location without triggering routeAngularjs:更新位置而不触发路由
【发布时间】:2013-12-17 20:40:35
【问题描述】:

我正在创建一个图片库,如果它在路线中指定,则加载特定图片(否则加载第一个):

foo/photos/sports/2

每个缩略图都包含在一个链接中以导致地址更改(因此用户可以直接链接回它):

<ul class="gallery-thumbnails">
  <li ng-repeat="piece in gallery.pieces">
    <a ng-href="/foo/photos/sports/{{$index+1}}">
      <img ng-src="{{piece.img}}" />
    </a>
  </li>
</ul>

问题在于它会导致重新渲染整个视图,而不仅仅是绑定到更改的范围参数 (scope.gallery.selected) 的模板。

我找不到取消视图重新渲染的方法(但我仍然希望更新 $routeParams)。

我见过 solutions 监听 $locationChangeSuccess,但这不适用于我的场景。

【问题讨论】:

标签: html angularjs routes


【解决方案1】:

接近的一种方法是使用 get 参数,转到 /foo/photos/sports?page={{$index+1}} 并在该路由中(作为“when”的参数)设置 reloadOnSearch:错误的。然后,您可以在不重新加载页面的情况下更新 $location.search(get 参数)并触发更改。

  // Using reloadOnSearch
  .when('/foo/photos/sports', {
    templateUrl: 'sports',
    reloadOnSearch: false
  });

  // Changing the get parameters (search part of url)
  $location.search({'page': 1});

除此之外,我认为您无法使用默认的角度路由器来做到这一点。它总是在路由更改时重新加载所有控制器。但是,您可以切换到另一个路由器,例如 ui-router,我相信它可以处理路径更改视图的重新加载部分。

【讨论】:

  • 这是否适用于链接? &lt;a href="?p=1"&gt;&lt;img/&gt;&lt;/a&gt; ?我开始研究 ui-router,但它是 alpha/beta 版本:s
  • 不确定,我一般应该考虑角截距 a-tags。
  • 我最终切换到 ui.router。感谢您的建议!
  • 这个解决方案的问题是,如果你直接导航到/foo/photos/sports?page={{$index+1}},它会清除搜索词。
  • 它不应该(也不适合我)。你确定没有其他东西可以删除你的参数吗?
猜你喜欢
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多