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>
기본 상태 정보는 어떻게 처리합니까? 페이지에 현재 선택 항목을 넣을 수 있습니다. 컨트롤러가 (보기 3과 같이) 뷰와 모델을 함께 연결하고 뷰에서 직접 액세스 할 수있게하는 것이 더 편리해 보입니다. (비록 뭔가가 나에게 잘못 느껴지더라도 컨트롤러의 역할을 완전히 줄이는 것 같습니다.) – Skyler
모델에서 "무언가"를 표시하기 위해 수정해야하는 데이터가 반환되기 전까지는 특별한 문제는 없습니다 (데이터, 오류, div를 숨기기 ex) 문제가있는 뷰에 로직을 넣어야하는 경우. 모델이 매우 전문화되어 반환 된 모든 단일 데이터가 간단한보기로 관리되는 경우 사용자의 접근 방식에는 문제가 없습니다. 데이터 바인딩 문제를 피하려면 항상 객체를 반환해야합니다. – rick