2013-04-12 3 views
3

CRUD 세부 화면에서 각도로 작업 중이며 단일 템플릿을 다시 사용하고 싶습니다. 여기CRUD 세부 화면, 조건부 신규 또는 편집

<h1>{{fixtureType.Label}}</h1> 
<form> 
    <span>Fixture Type Details</span> 
     <label>Type</label> 
     <input>{{fixtureType.Type}}</input> 
     <label>Watts</label> 
     <input>{{fixtureType.Watts}}</input> 
     <label>Cost</label> 
     <input>{{fixtureType.Cost}}</input> 
</form> 

내가 조건부뿐만 아니라 새로운 화면과 동일한 템플릿을 사용한다고 가정, 즉이

처럼 보일 것이다 초기 템플릿 사이비 - 코드, 편집 화면의 원유 시작은 ...입니다
<h1>New Fixture Type</h1> 
<form> 
    <span>Fixture Type Details</span> 
     <label>Type</label> 
     <input/> 
     <label>Watts</label> 
     <input/> 
     <label>Cost</label> 
     <input/> 
</form> 

이 바로 자바 스크립트를한다면, bIsEdit = fixtureType != null 같은 간단한 조건이 트릭을 할 것입니다. 내가 지금까지 읽은 것부터 JS의 덩어리를 각도보기로 떨어 뜨리는 조건부 또는 방법은 없습니다. 또는 지정 또는 필터에 도달하는 곳은 어디입니까?

이제 뷰가 ​​2 개 있고 적절하게 라우팅 할 수 있지만 코드 중복을 피하기 위해 단일보기를 선호합니다.

그래서 이런 식으로 처리하는 각도 방법은 무엇입니까?

+1

당신은 단지 빈 모델을 편집 할 수 없습니다 : 새로운 편집 가능한 버전 간의 차이가 너무 복잡하지 않을 때 폼 중복을 최소화하기 위해 접근? –

+0

나는이 아이디어가 마음에 들지만 현재 JS는 FixtureType 모델이 서버에서 오지 않는 한 어떻게 생겼는지 알지 못합니다. 내가 생각할 수있는 두 가지 옵션은 다음과 같습니다. 1. 클라이언트의 FixtureType과 비슷한 객체를 정리합니다. 2. 빈 FixtureType을 위해 서버를 두들겨보세요. 둘 다 소리가 거칩니다. – quickshiftin

+0

사실, 실험을 한 후에는 모델 대신 빈 익명 객체를 채우고 콘솔에 불만을 제기 할 수 있습니다. 나를 위해 일한다! 그러나 나는 또한 Mark에게 경로를 바꾸라는 신호를 받았다. 그의 답변에 대한 의견에서 취한 접근 방식에 대한 자세한 내용. – quickshiftin

답변

3

각각 별도의 경로를 선호합니다. 함께 편집하고 새로운 HTML을 유지하기 위해, 당신은 기본적으로 두 개의 템플릿 ng-switch을 사용할 수 있지만 당신이 할 수 있도록 두 가지보기에 겨-포함, 한 부분에 모두 그들을 가하고 고려 :

<span ng-switch on="mode"> 
    <span ng-switch-when="edit"> 
    <h1>{{fixtureType.Label}}</h1> 
    <form> 
     <span>Fixture Type Details</span> 
     <label>Type</label> 
     <input ng-model='fixtureType.Type' ...> 
    ... 
    </span> 
    <span ng-switch-default> 
    <h1>New Fixture Type</h1> 
    <form> 
     <span>Fixture Type Details</span> 
     <label>Type</label> 
     <input ng-model="fixtureType.Type" ...> 
    ... 
    </span> 
</span> 
+0

Include를 사용하려는 경우 스위치와 다소 비슷합니다. 문제는'{{fixtureType. }}'템플릿의 바인딩. 바깥 서식 파일의'ng-switch '옵션을 사용하더라도 포함 된 서식 파일의 해당 바인딩에 대처해야합니다. 결국 Mike가 제안한대로 빈 모델을 사용하고 경로를 전환하라는 제안을 하이브리드로 가져 왔습니다. 이 경우 '스위칭'은 컨트롤러에서 수행됩니다. 여기서 코드는 경로가 제공 한 ID를 기반으로 null FixtureType (읽기 :'{}') 또는 서버를 공격합니다. – quickshiftin

3

을 나는 다음과 같은 사용

<form ng-submit="mySubmitMethod()"> 
<!-- fields models bound to "activeItem"--> 
    <button > 
    <span ng-show="editMode>Update</span> 
     <span ng-show="!editMode">Create</span> 
    </button> 
</form> 
$scope.activeItem={}; 
    $scope.editMode=false; 
    $scope.mySubmitMethod=function(){ 
     if($scope.editMode){ 
      /* do update of existing*/ 
     }else{ 
      /* process new form*/ 
     } 
     $scope.resetform() 
    }); 

    $scope.EditUser=function(user){ 
     $scope.editMode=true; 
     $scope.activeItem=angular.copy(user); 
    }) 

    $scope.newUser=function(){ 
     $scope.editMode=false; 
     $scope.activeItem={}; 
    }) 
+0

내가 결국 함께했던 것과 매우 유사합니다. 또한'ng-show'에 대해서도 몰랐습니다. – quickshiftin