2016-06-02 2 views
1

컨트롤러를 가능한 한 얇게 만드는 것이 가장 좋습니다. 그러나 컨트롤러가 너무 얇을 수도 있습니까? 예를 들어, 아래의 코드는 세 가지 경우를 보여줍니다.컨트롤러 및 데이터 모델 처리

나는 그 사건 # 1이 최악의 경우임을 안다. 그러나 케이스 # 3이 케이스 # 2보다 바람직합니까?

단순화하기 위해 하드 코딩 된 "Hello World"를 사용했습니다. 실제로는 메시지를 반환하는 비즈니스 논리가 있습니다.

var app = angular.module('plunker', []); 

// model is inside controller (worst case) 
app.controller('controller1', function() { 
    this.message = 'Hello World'; 
}); 

// template accesses model thru controller. (getting thinner) 
app.controller('controller2', function(model) { 
    this.message = model.getMessage(); 
}); 


// controller pass model to template. (ultra thin) 
app.controller('controller3', function(model) { 
    this.model = model; 
}); 



app.factory('model', function() { 
    return { 
    getMessage: function() { 
     return 'Hello World' 
    } 
    } 

}); 

그리고 HTML

... 당신의 모델이 정적 텍스트 THER을 반환이 특별한 경우

<body> 
     <div ng-controller='controller1 as vm1'>{{vm1.message}}</div> 
     <div ng-controller='controller2 as vm2'>{{vm2.message}}</div> 
     <div ng-controller='controller3 as vm3'>{{vm3.model.getMessage()}} </div> 
    </body> 

답변

0

는 차이 없습니다.

그러나 api를 호출하는 고전적인 dataservice 모델을 상상해보십시오.

오류를 관리 할 수 ​​있도록 컨트롤러 내부의 http 호출과의 약속을 해결하는 것이 좋습니다. 그리고이 점은 귀하의 케이스 # 2를 가리 킵니다.

이 도움말을 통해 상황을 명확히 알 수 있습니다.

+0

기본 상태 정보는 어떻게 처리합니까? 페이지에 현재 선택 항목을 넣을 수 있습니다. 컨트롤러가 (보기 3과 같이) 뷰와 모델을 함께 연결하고 뷰에서 직접 액세스 할 수있게하는 것이 더 편리해 보입니다. (비록 뭔가가 나에게 잘못 느껴지더라도 컨트롤러의 역할을 완전히 줄이는 것 같습니다.) – Skyler

+0

모델에서 "무언가"를 표시하기 위해 수정해야하는 데이터가 반환되기 전까지는 특별한 문제는 없습니다 (데이터, 오류, div를 숨기기 ex) 문제가있는 뷰에 로직을 넣어야하는 경우. 모델이 매우 전문화되어 반환 된 모든 단일 데이터가 간단한보기로 관리되는 경우 사용자의 접근 방식에는 문제가 없습니다. 데이터 바인딩 문제를 피하려면 항상 객체를 반환해야합니다. – rick

관련 문제