如何在使用动态路由时停止重新加载控制器

时间:2015-05-21 20:02:10

标签: javascript angularjs

我的意图是

  • 使用动态路由时停止重新加载控制器。例如:如果我的路由定义为'/ home /:param',并且我从'/ home / path1'导航到'/ home / path2',则控制器会重新加载。

我试图通过使用ng-include包含模板来实现这一点。虽然它没有重新加载控制器,但路径URL保持不变。还有其他方法可以达到这个目的吗?

3 个答案:

答案 0 :(得分:2)

在路由上将reloadOnSearch设置为false - 以防止在URL中的查询参数或哈希值发生更改时重新加载控制器。有关详细信息,请参阅here

reloadOnSearch仅与查询参数或哈希值相关。因此,您必须使用查询参数才能工作。例如,您的链接将是这样的:

 <a href="#/test?id=1">Link 1</a>
 <a href="#/test?id=2">Link 2</a>

您可以使用$location服务获取ID,如下所示:

function testCtrl($scope, $location) {
    alert("reloading controller with id: " + $location.search().id);
}

这里有一个更新的小提琴:http://jsfiddle.net/donal/2cz4nz3o/1/

答案 1 :(得分:1)

从Donal的回答中汲取经验,这就是我最终要做的事情。

  1. 在routeprovider中设置reloadOnSearch=false
  2. 路线提交

    通过网址路由时, 使用$location.search()捕获参数并从控制器中加载相应的模板。

    在控制器中加载不同的模板时。 触发一个函数来更改模板并使用更新URL $location.search('id',newTemplateId);由于reloadOnSearch设置为false,它会注意到但会更改网址。

  3. 看看这个fiddle

    希望它对某人有帮助。

    更新:您可能还想在使用reloadOnSearch时设置$ routeUpdate。更多信息here

答案 2 :(得分:0)

这里有一个类似问题的SO post,答案中给出了一些替代方案(reloadOnSearch = false的替代方案取决于您的应用程序)