2015-01-12 3 views
1

각도 어플리케이션에 유용한 추가 '모델'개체를 포함하려고합니다. 아래 그림과 같이 별도의 javascript 파일 두 개가 있다고 가정합니다. 교사용 프로토 타입에 "createStudent"함수를 추가하고이를 학생 생성자 메서드라고 부릅니다. teacher.js가 student.js를 올바르게 참조 할 수 있습니까? 여기에 주사하는 방법은 무엇입니까?각도로 모듈 값 주입하기

참고 : 다양한 개체 모델을 Angular에 포함시키는 방법은 많이 있습니다. 예를 들어, 지금은 Restangular를 사용하는 길을 가고 싶지 않습니다. 나는이 순간을 매우 간단하게 유지하고 각도 모듈에 대한 이해를 높이기를 바랍니다.

감사합니다.

---------- teacher.js -----------

(function() { 
 

 
    var teacherConstructor = function() { 
 

 
     var teacher = { 
 
      student: [] 
 
     }; 
 
     
 
     return teacher; 
 

 
    }; 
 

 

 
    var module = angular.module("MyApp.models"); 
 
    module.value("teacber", teacberConstructor); 
 
}());

--------- 01 - 사용 -

(function() { 
 

 
    var studentConstructor = function(theTeacher) { 
 

 
     var student = { 
 
      myTeacher: theTeacher 
 
     }; 
 
     
 
     return student; 
 

 
    }; 
 

 

 
    var module = angular.module("MyApp.models"); 
 
    module.value("student", studentConstructor); 
 
}());

답변

2

가능한 용액 student.js: 학생을 참조 할 수 있도록하기위한

(function() { 
    var module = angular.module("MyApp.models"); 

    module.factory("teacher", ["student", function(Student) { 
     var teacherConstructor = function() { 
      ... 
      var student = new Student(this); 
      ... 
     }; 

     return teacherConstructor; 
    }]); 
})(); 

어쨌든 교사 "클래스"의 정의는, 각도의 정의 함수 내에서 수행해야합니다.

그러나 이렇게하면 불필요한 종료가 발생합니다. 나는 각도의 기본 방식에 찬성, 외부 기능을 떨어 제안 : (!) 참고로

angular.module("MyApp.models").factory("Teacher", ["student", function(Student) { 
    var Teacher = function() { 
     ... 
     var student = new Student(this); 
     ... 
    }; 

    return Teacher; 
}]); 

, 그것은 자본으로 시작하는 "클래스"에 대한 관례이다. 즉 Student, Teacher입니다. 생성자는 클래스의 이름을 가질 수도 있으므로 위 코드에서 teacherConstructorTeacher입니다.

+0

고마워요! 그것은 조명입니다. 후속 질문 : 이러한 하나의 .factory() 호출은 다른 하나를 주입 할 수 있다고 가정합니다. 그렇지 않으면 순환 종속성을 갖게됩니다. 그래서 선생님이 새로운 학생을 만들지 아니면 학생이 선생님을 만들지를 선택해야합니다. 그게 맞습니까? 그리고 의견 : Crockford의 저서 "Javascript : The Good Parts"에 따라 'new'키워드 사용을 피하려고했습니다. 왜냐하면 새로운 Teacher()와는 달리 생성자 함수를 사용하는 것이 많은 이점을 제공하기 때문입니다. 예를 들어 객체에 개인 기능과 공개 기능을 적용 할 수있는 기능이 있습니다. –

+0

안녕하세요. 순환 성에 대하여 : 네, 맞습니다. 그러나 그것은 모든 언어에서 문제가 될 것입니다. 'new' 연산자로 private 멤버를 가질 수 있습니다 - 물론 약간의 세부 사항이 빠져있을 수도 있습니다. 그러나 가장 생산적인 (IMO)은 당신에게 맞는 스타일을 선택하는 것이므로 생성자 함수에는 문제가 없습니다. 어떤 사람들은 심지어 객체 지향 로직을 버리고 자바 스크립트로 모든 기능을 수행한다고 주장한다. –

+0

Angular는 서비스를 제공함으로써 기능적 프로그래밍을 제공하는 것으로 보이는데, 이것은 내가 볼 수있는 한 곧은 싱글 톤이다. 내 객체 그래프를 효과적으로 정적 함수의 집합으로 단순화하는 것에 대해 생각했지만 나 자신을 그렇게 할 수는 없었습니다. –