AngularJS 具有相同模板的多个路由不应重新渲染

Posted

技术标签:

【中文标题】AngularJS 具有相同模板的多个路由不应重新渲染【英文标题】:AngularJS multiple routes with same template shouldn't rerender 【发布时间】:2015-08-27 04:44:30 【问题描述】:

我有几个使用相同模板的视图,只是路由参数的数量不同,我该如何设置它以便每次路由更改时都不会重新渲染视图,尝试使用reloadOnSearch: false,但是由于某种原因它没有工作。

app.config(['$routeProvider', function ($routeProvider) 
    $routeProvider
        .when('/feeds', 
            templateUrl: 'partials/feeds.html',
            controller: 'FeedsController'
        )
        .when('/feeds/:country', 
            templateUrl: 'partials/feeds.html',
            controller: 'FeedsController'
        )
        .when('/feeds/:country/:competition', 
            templateUrl: 'partials/feeds.html',
            controller: 'FeedsController'
        )
        .otherwise(
            redirectTo: '/feeds'
        );
]);

【问题讨论】:

你是怎么解决你的问题的? 【参考方案1】:

根据documentation,你不能为一个路由定义多个path's。因此,在您的情况下,您应该定义两个唯一的 routes ,例如:

app.config(['$routeProvider', function ($routeProvider) 
    $routeProvider
    .when('/feeds/:country/:competition/:event', 
        templateUrl: 'partials/event.html',
        controller: 'EventController'
    )
    .when('/feeds/:country/:competition', 
        templateUrl: 'partials/feeds.html',
        controller: 'FeedsController'
    )
    .otherwise(
        redirectTo: '/feeds'
    );
]);

不同之处,请始终使用完整参数调用此 URL,例如:

http://yourapplication/feeds/false/false/false

http://yourapplication/feeds/1/false/false

http://yourapplication/feeds/1/2/false

http://yourapplication/feeds/1/2/3

调用FeedsController 的人仍然是唯一的,只有两个参数:

http://yourapplication/feeds/1/2/

【讨论】:

我不能使用像:myapplication/feeds/false/false/false 这样的网址,用户必须能够输入以下任何网址:myapplication/feeds/1、myapplication/feeds/1/2 或 myapplication/feeds/1/2/3,而无需输入“false”

以上是关于AngularJS 具有相同模板的多个路由不应重新渲染的主要内容,如果未能解决你的问题,请参考以下文章

执行前不显示AngularJS代码[重复]

具有不同参数的多个路由,调用相同的资源

angularjs 路由可以有可选的参数值吗?

Laravel中的路由问题,带有多个控制器和具有相同名称的不同路由[关闭]

AngularJS 不能在浏览器重新加载时运行

使用 AngularJS 路由时有没有办法预加载模板?