如何在AngularJS中更改路径时阻止视图重绘

时间:2014-03-05 07:28:35

标签: javascript angularjs angular-routing angularjs-view

我正在制作一个网络应用,用户可以在地图上查看对象,按标记并转到包含信息的新视图。从这个角度来看,他们可以更深入地了解更多信息。

类似的东西:

  • /地图
  • /树/ {treeid}
  • /树/ {treeid} /信息/ {informationid}

我知道在遍历路线/状态时如何保持实际的模型状态。问题是当我回到浏览器历史记录时,我不想重新计算整个地图(带标记和所有内容)。换句话说,我希望在进一步遍历时保持/ map的渲染状态。

这可以通过使用搜索参数而不是/ map上的路由(即。/ map?treeid = 10)和禁用搜索重新加载,并在地图对象上执行ng-hide =“treeid”和ng-来轻松实现。显示在tree-info对象上。

我的问题是,是否有一种更好,更合适的方式以角度进行此操作?

提前致谢。

3 个答案:

答案 0 :(得分:2)

解决“重新计算整个地图”问题,解决此问题的一种方法是将Google地图绘制在与ng-view相同的级别,并将其移出视图以隐藏它。

这是一个说明如何工作的傻瓜:
http://plnkr.co/edit/wsjYoG2uXxYxXTmWdFGh?p=preview

注意隐藏时我是如何故意将地图的一部分留在屏幕上,以显示在更改路线时不会重绘。

答案 1 :(得分:0)

您可以创建专门的服务来存储数据。由于服务是单例,因此数据将在您的视图和控制器之间共享。像这样:

angular.module('myApp').factory('GlobalService', [
    function() {
        var _this = this;
        _this._data = {
            user: window.user,
            authenticated: !! window.user
        };

        return _this._data;
    }
]); 


angular.module('myApp').controller('FooController',
    ['$scope', 'GlobalService',
    function ($scope, GlobalService) {
    $scope.global = GlobalService;
    $scope.global.bar = someData;
    ...
]);

答案 2 :(得分:0)

这看起来很有用:AngularJS Performance Tuning for Long Lists。它详细介绍了在渲染大型/复杂数据结构时要避免的建议和陷阱。