2014-11-10 3 views
0

나는 학생들을 나열하는 컨테이너 지시어와 모달을 통해 데이터를 편집하는 데 사용되는 자식 지시어를 가지고있다. 그래서 그것을 편집하기 위해 고립 된 범위에있는 child 지시문에 학생 객체를 전달하고 싶습니다. 문제는 객체가 전달되지 않는다는 것입니다. 여기 지시어에서 지시어로 객체 전달하기

내가있어 무엇 :

angular.module('accountsApp.students.directives', ['ngRoute']) 

.directive('studentsList', ['UserStudents', function($scope, UserStudents) { 
    // Create isolate scope and get student list 
    return { 
     restrict: "E", 
     templateUrl: '/studentsList.html', 
     controller: function($scope, UserStudents){ 
      // Get students of user and add to scope 
      var students = UserStudents.query({ 
       userId: $scope.userid 
      }, function(data) { 
       $scope.students = data; 
      }); 
     } 
    } 
}]) 

.directive('studentEdit', function(){ 

    return { 
     restrict: "E", 
     templateUrl: '/studentEdit.html', 
     scope: { 
      student: "@student", 
      index: "@index" 
     } 
    } 
}) 

/studentsList.html :

<li ng-repeat="student in students"> 
    <p>{{ student.firstname }}</p> 
    <student-edit student="{{ student }}" index="{{ $index }}"></student-edit> 
</li> 

/studentEdit.html :

<div class="modal"> 
    <label for="student-edit-{{ $index }}"> 
     <div class="btn js-btn" ng-click="editStudent(student)">Edit</div> 
    </label> 
    <input class="modal-state" id="student-edit-{{ $index }}" type="checkbox" /> 
    <div class="modal-window"> 
     <div class="modal-inner"> 
      <label class="modal-close" for="student-edit-{{ $index }}"></label> 
      <h1>Editing {{ student.firstname }} {{ student.lastname }}</h1> 
      <form> 
       <label for="student-firstname">First Name</label> 
       <input type="text" name="student-firstname" ng-model="student.firstname" /> 
       <div ng-show="errors.firstname" ng-repeat="message in errors.firstname">{{ message }}</div> 

       <label for="student-lastname">Last Name</label> 
       <input type="text" name="student-lastname" ng-model="student.lastname" /> 
       <div ng-show="errors.lastname" ng-repeat="message in errors.lastname">{{ message }}</div> 

       <label for="student-email">Contact Email Address</label> 
       <input type="text" name="student-email" ng-model="student.email" /> 
       <div ng-show="errors.email" ng-repeat="message in errors.email">{{ message }}</div> 

       <button class="btn js-btn" type="button" ng-click="saveStudent(student, $index)">Save</button> 
       <button class="btn js-btn" type="button" ng-click="cancelModal($index)">Cancel</button> 
      </form> 
     </div> 
    </div> 
</div> 

이상하게도, 나는 studentEdit에 {{ student }}을 평가하는 경우 .html, 그것은 전체 객체를 보여 주지만, 나는 접근 할 수 없다, 말하자면, {{ student.firstname }}.

This plunk은 문제의 단순화입니다. 즉, 개체를 볼 수는 있지만 속성에 액세스 할 수없는 이유는 무엇입니까?

<li ng-repeat="student in students"> 
    <p>{{ student.firstname }}</p> 
    <student-edit student="student" index="{{ $index }}"></student-edit> 
</li> 

및 stundeEdit에

당신이 범위에 대한 "@"의 "="instad를 사용해야합니다 지시문 : 당신이 당신의 학생 목록 템플릿 있도록 이중 중괄호를 사용하지 말아야 바인딩이 방법에 대한

+0

샘플 데모는'학생이어야한다 참조하십시오 : "= 학생"'? – akonsu

+0

@akonsu가 맞을 확률이 높습니다. plunk를 만들어주세요. 그렇지 않으면 문제를 디버그하는 것이 정말 어렵습니다. 기본적으로 솔루션을 추측합니다. 내 코드가 괜찮은 것 같아요 – Linial

+0

고마워, 나는 plunk를 추가했습니다. – babbaggeii

답변

1

은해야 것 같습니다. 학생 예 :

app.directive('studentEdit', function() { 

    return { 
    restrict: "E", 
    templateUrl: 'studentEdit.html', 
    scope: { 
     student: "=student", 
     index: "@index" 
    } 
    } 
}) 

여기 http://plnkr.co/edit/P31hG5ADJp1TpHfNR0a0?p=preview

+0

대단히 감사합니다. 그 작품 - 그러나, 나는 자식 범위를 분리하려고하지만,이 솔루션은 두 가지 방법을 바인딩합니다. 바인딩을 사용하지 않고 객체를 전달하고 싶습니다. – babbaggeii

+0

은 개체가 참조에 의해 전달되고 부모 범위에서 부모 범위로 바인딩되기 때문에가 아니기 때문에 그렇지 않습니까? – akonsu

+0

@babbaggeii이 경우 학생의 임시 복사본을 만들 수 있습니다 http://plnkr.co/edit/P31hG5ADJp1TpHfNR0a0?p=preview – sylwester