哪里是我为我的模块声明/初始化$ scope变量的好地方?

时间:2013-10-27 11:28:34

标签: angularjs

我有以下内容:

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

1 个答案:

答案 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