angularjs在路线之间传递范围

时间:2015-07-17 08:29:13

标签: angularjs controller routes scope angular-routing

我想做类似的事情:

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.

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

2 个答案:

答案 0 :(得分:1)

您可以将数据附加到 $rootScope,但您想使用service

服务提供了一种在角度应用程序的生命周期内保留数据的方法。它是以一致的方式跨控制器传递数据的一种方式。

创建这样的服务:

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文档。

答案 1 :(得分:1)

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

您可以使用services执行此任务。

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

您的服务非常简单,只需返回一个空对象:

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

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

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

这是一个有效的Plunker