ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 17장 Angular.js 를 이용한 MVC 엔티티
    MeanStack (deprecated) 2016. 7. 5. 01:12



    이번 장에서는 Angular.js 를 이용한 MVC 패턴을 를 구성해보겠다. 


    MVC 패턴을 구현하기 위해 먼저 , static 폴더example 이라는 폴더를 생성하고 , 하위폴더로 controllers 와


    views 라는 폴더를 만들자. 


    그리고 static/example 폴더 안에 example.client.module.js 라는 파일을 만들자. 


    이 파일에 angular.module() 메소드를 사용하여 새로운 angular.js 모듈을 생성할 것 이다. 


    여기에 다음 코드를 넣자. 


    angular.module('example', []);
    


    위 코드는 angular.js 모듈을 생성할 것 이다. 하지만 여전히 애플리케이션 페이지에서 모듈 파일과 


    주 애플리케이션 모듈의 의존성으로 모듈을 포함 할 필요가 있다. 


    저번 장에서 만든 텍스트 입력 창 예제를 제거하고 모듈파일을 올릴 새로운 script 를 index.ejs 파일을 


    변경해야 한다. app/views/ 폴더 안에 index.ejs  파일을 변경하자. 



    <!DOCTYPE HTML>
    <html>
        <head>
            <title>
                <%= title %>
            </title>
        </head>
        <body>
            <% if (username) { %> 
             <h2>Hello <%=username %></h2>
             <a href="/signout">Sign out</a>
            <% } else { %> 
             <a href="/signup">Signup</a>
             <a href="/signin">Signin</a>
            <% } %>
            <br />
            <img src="images/overwatchlogo.png" alt="logo" />
            <script type="text/javascript" src="/lib/angular/angular.js"></script>  
            <script type="text/javascript" src="/application.js"></script>          
            <script type="text/javascript" src="/example/example.client.module.js"></script>  <!-- 추가 -->
        </body>
    </html>
    




    그리고 static 폴더안의 application.js 를 다음처럼 변경하는 방식으로 주 애플리케이션 모듈의 의존성으로 example


    모듈을 추가하자. 이제 실제로 angular.js 를 사용할 뷰를 만들어 보자. 


    먼저 static/example/views 폴더안에 example.client.view.html 파일을 생성하고 다음 코드를 붙여넣자.


    <section>
        <input type="text" id="text1" ng-model="name" />
        <input type="text" id="text1" ng-model="name" />
    </section>
    



    이제 위 텍스트 입력창을 index.ejs 에서 나타나게 하기 위해 app/views/ 폴더로 가서 index.ejs 파일을 변경하자. 

    <!DOCTYPE HTML>
    <html>
        <head>
            <title>
                <%= title %>
            </title>
        </head>
        <body>
            <% if (username) { %> 
             <h2>Hello <%=username %></h2>
             <a href="/signout">Sign out</a>
            <% } else { %> 
             <a href="/signup">Signup</a>
             <a href="/signin">Signin</a>
            <% } %>
            <section ng-include="'example/views/example.client.view.html'"></section>   <!-- 추가 -->
            <br />
            <img src="images/overwatchlogo.png" alt="logo" />
            <script type="text/javascript" src="/lib/angular/angular.js"></script>  
            <script type="text/javascript" src="/application.js"></script>          
            <script type="text/javascript" src="/example/example.client.module.js"></script>  
        </body>
    </html>
    




    위 코드에서 ng-include 지시자를 사용했다. 이놈은 코드만 봐도 감이 올 것이다. 


    명시된 경로에서 템플릿을 읽어와서 부로 컴파일 한 다음, 출력 결과를 지시자 DOM 내부 , 즉 ng-include 에 위치


    시킨다.  이제 제대로 나오는지 테스트 해보자.  


    node 서버를 키고 localhost로 접속하여 텍스트 입력 창 2개가 나오는지 확인해보자. 




    이번엔 Angular.js 의 컨트롤러를 붙여보자. 


    angular.js 의 컨트롤러는 기본적으로 생성자 함수이며, angular.js가 컨트롤러 객체의 새로운 인스턴스를 생성하기 


    위해 사용한다. 일반적으로 컨트롤러 인스턴스는 ng-controller 지시자를 사용할 때 생성된다. 


    angular.js 컴파일러는 새로운 컨트롤러 인스턴스를 생성하기 위해 지시자에게 언든 컨트롤러 이름을 사용한다. 


    이 때, 해당 컨트롤러 인스턴스로 영역 객체를 전달하기 위해 의존성 주입을 활용한다. 


    그리고 나서 컨트롤러는 영역 초기 상태를 설정하거나 기능을 확장하기 위해 사용된다. 



    자 일단 한번 직접 angular.js 컨트롤러를 사용해보자.


    static/example/controllers  폴더 안에 example.client.controller.js 라는 파일을 만들고 다음 코드를 붙여 넣자.


    angular.module('example').controller('ExampleController', ['$scope',
        function($scope) {
            $scope.name = 'Mean application';
        }
    ]);
    
    



    코드를 살펴보면 먼저 example 모듈을 인출하기 위해 angular.module() 메소드를 사용했다. 디음으로 controller() 


    메소드를 사용하여 새로운 ExampleController 라는 생성자 함수를 생성하고 생성자 함수에 $scope 객체를 


    주입하기 위해 의존성 주입을 사용하였다. 마지막으로 나중에 뷰에서 사용할 name 속성을 정의하기 위해 $scope 


    객채를 사용했다.  


    이제 이 놈을 사용하기 위해 app/views 폴더로 가서 index.ejs 파일을 수정하자. 



    <!DOCTYPE HTML>
    <html>
        <head>
            <title>
                <%= title %>
            </title>
        </head>
        <body>
            <% if (username) { %> 
             <h2>Hello <%=username %></h2>
             <a href="/signout">Sign out</a>
            <% } else { %> 
             <a href="/signup">Signup</a>
             <a href="/signin">Signin</a>
            <% } %>
            <section ng-include="'example/views/example.client.view.html'"></section>   
            <br />
            <img src="images/overwatchlogo.png" alt="logo" />
            <script type="text/javascript" src="/lib/angular/angular.js"></script>  
            <script type="text/javascript" src="/application.js"></script>          
            <script type="text/javascript" src="/example/example.client.module.js"></script>  
            <script type="text/javascript" src="/example/controllers/example.client.controller.js"> </script> <!-- 추가 -->
        </body>
    </html>


    index.ejs 에 방금 만든 컨트롤러 파일을 추가하였다.  


    그리고 위에서 만든 example.client.view.html 파일을 기억하는가?  거기에 controller 를 붙일 것 이다. 


    static/example/views 로 가서 example.client.view.html  파일을 변경하자.

    <section ng-controller="ExampleController">
        <input type="text" id="text1" ng-model="name" />
        <input type="text" id="text2" ng-model="name" />
    </section>
    




    ng-controller 지시자를 사용하여 위에서 만들었던 ExampleController 를 붙였다.


    그리고 컨트롤러 파일에서 $scope.name 으로 Mean application 이라는 문자를 지정해 두었고 현재 텍스트 창의 


    ng-model 에 name 속성을 주었으니 결과는 안봐도 예상이 가능할 것 이다. 



    이제 node 서버를 키고 한번 접속해보자. 



    다음 처럼 텍스트 창에 컨트롤러 파일에서 설정한 대로 Mean application 이라는 문자가 텍스트 창에 미리 


    입력되어 나타난다. 




    이번장에는 angular.js 를 사용하여 뷰와 컨트롤러를 사용하였다. 


    다음 장에서는 angular.js 를 이용하여 라우팅을 제어 해 볼 것 이다. 



    (끝)




    (현재 폴더 구조)

    댓글