2014-09-03 79 views
0

我有一个角度控制器,其中有许多变量decalred。我想在我的角度服务来访问这些:AngularJS - 在控制器中定义的服务中访问var

app.controller("MyController", function($scope, myService) { 

    var pageIDs = { 
     '1': 'home', 
     '2': 'contact-us', 
     '3': 'products', 
     '4': 'complaints' 
    } 

    var doSomething = { 
     'home': function() { 
      $scope.Model($scope.MyData, { 
       Data: $scope.Data 
      }); 
     }, 
     // Contact-us function //////// 
     // Products functions //////// 
     // Complaints functions //////// 
    } 

    $scope.service = myService.getData; 
} 

app.factory('myService', function() { 
    return { 
     getData: function() { 
      var Hash = window.location.hash; 
      if (Hash) { 
       var WithoutHash = WithHash.substring(1); 
       if (doSomething [WithoutHash]) doSomething [WithoutHash](); 
      } 
     } 
    }; 
}); 

正如你所看到的,为myService中,我试图来访问我的控制器中定义的VAR DoSomething的。

+1

我认为你应该改变你的方法,服务/工厂没有线索在哪里注入,如果你注入'myService' t 10个控制器,每个控制器都会有'doSomething'?将服务视为控制器的助手或可从控制器提取的功能的集合,并且可以独立工作或作为少数控制器的通用部分。希望这是有道理的 – maurycy 2014-09-03 10:31:03

回答

1

,您可以给变量服务:

$scope.service = myService.getData(doSomething); 

,并在您的服务:

app.factory('myService', function() { 
    return { 
     getData: function(doSomething) { 
      var Hash = window.location.hash; 
      if (Hash) { 
       var WithoutHash = WithHash.substring(1); 
       if (doSomething [WithoutHash]) doSomething [WithoutHash](); 
      } 
     } 
    }; 
}); 
1

把所有的变量$范围或任何这样的对象,并通过服务方法:

app.controller("MyController", function($scope, myService) { 

      $scope.pageIDs = { 
       '1': 'home', 
       '2': 'contact-us', 
       '3': 'products', 
       '4': 'complaints' 
      } 

      var doSomething = { 
       'home': function() { 
        $scope.Model($scope.MyData, { 
         Data: $scope.Data 
        }); 
       }, 
       // Contact-us function //////// 
       // Products functions //////// 
       // Complaints functions //////// 
      } 

      $scope.service = myService.getData; 
      myService.setData($scope); 

     } 

     app.factory('myService', function() { 
      var controllerVar = {}; 
      return { 
       getData: function() { 
        var Hash = window.location.hash; 
        if (Hash) { 
         var WithoutHash = WithHash.substring(1); 
         if (doSomething[WithoutHash]) doSomething[WithoutHash](); 
        } 
       } 
       setData: function(obj) { 
        controllerVar = obj; 
       } 

      }; 
     }); 
相关问题