url路由时数据消失

时间:2013-08-27 11:15:24

标签: javascript angularjs

我正在使用tabletop.js,handlebars.js和angular.js创建Web应用程序

因此,数据来自谷歌电子表格并使用角度进行路由 但是当路由到另一个页面并返回后数据消失

Here's a Plunker of it

有人可以提供解决方案吗,我已经尝试过搜索但还没有运气:/

桌面控制器

  var public_spreadsheet_url = 'https://docs.google.com/spreadsheet/pub?hl=en_US&hl=en_US&key=0AkLy8qCw6J5EdGlmeFZEVVVZZ3ZUSEhYcjhEdEZKelE&output=html';

  $(document).ready( function() {
    Tabletop.init( { key: public_spreadsheet_url,
                     callback: showInfo,
                     parseNumbers: true } );
  });

  function showInfo(data, tabletop) {
    var source   = $("#cat-template").html();
    var template = Handlebars.compile(source);

    $.each( tabletop.sheets("Cats").all(), function(i, cat) {
      var html = template(cat);
      $("#content").append(html);
    });
  }

这些是角度脚本

    var routeApp = angular.module('routeApp', []);

    routeApp.filter('range', function() {
        return function(input, total) {
            total = parseInt(total);
            for (var i=0; i<total; i++) {
                input.push(i);
            }
            return input;
        };
    });

    routeApp.config(function($routeProvider, $locationProvider) {

        $routeProvider.
            when('/home', { controller: HomeCtrl, templateUrl: 'partials/home.html' }).
            when('/movie/:id', { controller: BlogDetailCtrl, templateUrl: 'partials/movieDetail.html' }).
            when('/product', { controller: ProductCtrl, templateUrl: 'partials/product.html' }).                
            otherwise({ redirectTo: '/home' });

        $locationProvider.html5Mode(false);

    });

    function MainCtrl($scope) {

        $scope.navs = [
            { text: 'Products', href: '#/product' },                
        ];

    }

    function HomeCtrl($scope) {         
        console.log($scope);            
    }

    function BlogDetailCtrl($scope, $routeParams) {
        $scope.id = $routeParams.id;

        $scope.youAreClick = function(what) {
            alert('You are click on ' + what);
        }
    }

    function ProductCtrl($scope) {          
        $scope.items = [
            { grid: 3.5, filename: '360x270' },
            { grid: 3.5, filename: '260x120' },
            { grid: 3, filename: '160x120' },
            { grid: 3, filename: '260x120' },
            { grid: 3, filename: '260x120' } 
        ];          
    }

2 个答案:

答案 0 :(得分:1)

每次路线更改时,都会动态创建/销毁控制器。存储在其中的数据不是持久的。

克服这种情况的一种方法是使用Service

正如文档中所述:“最后,重要的是要认识到所有Angular服务都是应用程序单例。”

答案 1 :(得分:0)

查看Angular-Multi-View,特别是persist()方法。它允许您在路由更改中保留视图的范围。