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
我想做类似的事情:
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