angularjs 在路由之间传递范围

angularjs passing scope between routes

我想做类似的事情:

1. Set $scope.val = <Some dynamic data> 
2. Click a link and be routed to a new template (with the same controller). 
3. $scope.val should still be the same value as it was on the last page.

是否以某种方式为范围持久化数据是解决此问题的正确方法,还是有其他方法?您甚至可以创建一个在路由之间具有持久范围的控制器,当然除了将其保存在数据库中。

您可以将数据附加到 $rootScope, but you want to use a service.

一项服务提供了一种在 angular 应用的整个生命周期内保存数据的方法。这是一种以一致的方式在控制器之间传递数据的方法。

像这样创建服务:

var DynamicData = angular.module('myApp', [])
.service('GetDynamicData', function () {
    $scope.data = [];
    $http.get('yourApiUrl/data.json').then(function(res){
     $scope.data = res.data;
    });
});

然后你就可以在其他控制器中使用这个服务了,像这样:

var myApp = angular.module('myApp', ['GetDynamicData']);
 myApp.controller('DataController', function ($scope, GetDynamicData) {
    //provide some business logic on $scope.data

 }
});

您可以通过服务获取一些动态数据(使用该服务,然后将该服务注入到您要使用该数据的控制器中。查看 the provider 文档。

您可以在控制器之间共享数据,但不能使用简单的 $scope

您可以使用 services 完成此任务。

每当您访问新路线时,都会重新创建一个控制器。但是服务在您的应用程序中是一个单例。因此可以从每个新控制器访问存储在服务中的数据。

您的服务可以非常简单,只是 return 一个空对象:

app.factory('sharedData', function() {
  return {
    name: 'Daniel'
  };
});

然后在您的控制器中,您可以简单地将服务中的此数据对象设置为 $scope

app.controller('MainController', function($scope, sharedData) {
  $scope.data = sharedData;
});

这是一个有效的 Plunker