我想做类似的事情:
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.
以某种方式为范围保留数据是正确的方法,还是有其他方法?您是否可以创建一个在路由之间具有持久范围的控制器,当然除了将其保存在数据库中之外。
答案 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