0

我有以下内容:

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 变量?

4

1 回答 1

1

是的,将变量存储到服务中是一种很好的做法。

服务是可以注入任何控制器并在控制器范围内公开它们的值的单例。

但是,你不能注入$scope到服务中,没有什么比单例 $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

于 2013-10-27T11:37:54.653 回答