我有以下内容:
angular.module('admin')
.controller('AdminContentController',
['$scope', '$resource', 'gridService', 'gridSelectService', 'localStorageService', 'utilityService',
function ($scope, $resource, gridService, gridSelectService, localStorageService, utilityService ) {
localStorageService.add('ls.adminPage', 'content');
$scope.entityType = 'Content';
gridService.gridSetup($scope);
和
angular.module('admin')
.factory('gridService',
['$resource', '$timeout', 'gridSelectService', 'localStorageService', 'utilityService',
function ($resource, $timeout, gridSelectService, localStorageService, utilityService) {
var factory = {
gridSetup: function ($scope) {
$scope.grid = {
fetching: false,
pristine: true,
pageType: 'Edit'
}
我正在初始化服务中的范围变量,但我不确定这是否是正确的方法。
我有更好的方法在另一个地方为模块设置$ scope变量吗?
答案 0 :(得分:1)
是的,将变量存储到服务中的良好做法。
服务是可以注入任何控制器并在控制器范围内公开其值的单例。
但是,您不能将$scope
注入服务,没有像单例$范围那样。
您可以通过以下方式实施factory
:
myApp.factory('gridService',
['$timeout',
function ( $timeout) {
var grid = {
fetching: false,
pristine: true,
pageType: 'Edit'
}
return {
gridSetup: function () {
return grid;
},
setGridSetup: function (newGrid) {
grid = newGrid;
}
}
}]);
我们从控制器使用我们的工厂:
$scope.newGrid = gridService.gridSetup();
$scope.copyGrid = angular.copy($scope.newGrid);
$timeout(function() {
$scope.copyGrid.pageType = "Fess";
gridService.setGridSetup($scope.copyGrid);
$scope.newGrid = gridService.gridSetup();
}, 3000);
我们加载模型,3秒后我们更改pageType
并再次存储。在下次加载后,我们得到修改后的模型。
演示 Fiddle