2016년 1월 28일 목요일

[AngularJS] Provider service


  • 프로바이더 서비스
  • get 을 이용하는 것 외에는 factory 서비스와 유사하다
  • config을 사용해서, 모듈별로 다른 설정을 해서 사용할 수 있어서 확장이 유연하다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<!DOCTYPE html>
<html >
  <head>
    <meta charset="utf-8">
  </head>
  <body ng-app='helloApp'>
    <div ng-controller='InputController' ng-init="inputNum =0">
    <span>Input</span>
    <input type='text' ng-model='inputNum' ng-click='calcNum()'>
    <p> {{getResult()}}</p>    
    </div>
    
    <div ng-controller='OutputController'>
    <span>Output</span>
    <p> {{getCurrent()}}</p>    
    </div>
        
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.12/angular.min.js"></script>
    <script>
    var hello  = angular.module('helloApp',[]);
    //Get 으로 factory 등과 동일하게 작성된다.
    hello.provider('HelloProvider',function() {
      var configValue = 0;
      this.$get = function(){
       return {
          sum: configValue,            
          add:function(num){ this.sum += num;},          
          getSum :function(){return this.sum;}
        };
      };
      this.setStartValue = function(numValue){
        console.log(numValue);
        configValue= numValue;
      };    
    });
    // 다른 점은 각 모듈의 config를 원하는 속성으로 조절해서 사용할 수 있다.
    hello.config(function(HelloProviderProvider) {
      HelloProviderProvider.setStartValue(100);
    });
        
    hello.controller('InputController'function($scope, HelloProvider){
      $scope.getResult = function(){
        return HelloProvider.getSum();
      };
      //마우스 클릭하면, 숫자가 업데이트 된다.
      $scope.calcNum= function(){
        HelloProvider.add(Number($scope.inputNum));
      };      
    });
    
    // input/output 컨트롤러는 하나의 서비스 데이터를 공유한다.
    hello.controller('OutputController'function($scope, HelloProvider){
      $scope.getCurrent = function(){
        return HelloProvider.getSum();
      };    
    });    
    </script>
  </body>
</html>
cs

댓글 없음:

댓글 쓰기